日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(一)

發(fā)布時間:2025/7/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ObjectBuilder之創(chuàng)建策略祥解() ???????

????????????????????????????????????????????????????????????????????? Written by 浪子 [walkingboy.cnblogs.com]????

前言:

?

ObjectBuilder已經(jīng)默認制定了很多創(chuàng)建策略,可能看到這么多策略加上整個地方架構(gòu)滿天飛,反而搞不清楚如何去應(yīng)用ObjectBuilder創(chuàng)建我們需要的對象了。研究它的原理只是為了更好的發(fā)揮它的功效,本系列將詳細解析ObjectBuilder中的所有默認創(chuàng)建策略的原理以及應(yīng)用:

?

?

1、類型映射策略(TypeMappingStrategy)


?? 上文 講過,策略的具體行為都是由他們各自所對應(yīng)的方針來決定的。類型映射策略也有其映射方針:


??

?? 方針規(guī)范(
ITypeMappingPolicy):


public?interface?ITypeMappingPolicy?:?IBuilderPolicy
{
????
/**////?<summary>
????
///?Maps?one?Type/ID?pair?to?another.
????
///?</summary>
????
///?<param?name="incomingTypeIDPair">The?incoming?Type/ID?pair.</param>
????
///?<returns>The?new?Type/ID?pair.返回映射后的對象類型&標識</returns>

????DependencyResolutionLocatorKey?Map(DependencyResolutionLocatorKey?incomingTypeIDPair);

}

?

?

?

?? 具體方針(TypeMappingPolicy):

?

?????
?????

public?class?TypeMappingPolicy?:?ITypeMappingPolicy
{
????
private?DependencyResolutionLocatorKey?pair;
?????
????
/**////?<summary>
????
///?Initializes?a?new?instance?of?the?<see?cref="TypeMappingPolicy"/>?class?using
????
///?the?provided?type?and?ID.
????
///?</summary>
????
///?<param?name="type">要翻譯的對象類型</param>
????
///?<param?name="id">The?new?ID?to?be?returned?during?Map.</param>

????public?TypeMappingPolicy(Type?type,?string?id)
????
{
????????pair?
=?new?DependencyResolutionLocatorKey(type,?id);

????}


????
/**////?<summary>
????
///?See?<see?cref="ITypeMappingPolicy.Map"/>?for?more?information.
????
///?</summary>

????public?DependencyResolutionLocatorKey?Map(DependencyResolutionLocatorKey?incomingTypeIDPair)
????
{
????????
return?pair;
????}


}




?

創(chuàng)建策略中的類型映射應(yīng)用:

?

???????

public?override?object?BuildUp(IBuilderContext?context,?Type?t,?object?existing,?string?id)
{
????
//要創(chuàng)建的對象類型DependencyResolutionLocatorKey
????DependencyResolutionLocatorKey?result?=?new?DependencyResolutionLocatorKey(t,?id);

????
//按照創(chuàng)建的對象類型和標識查詢上下文中的映射方針
????ITypeMappingPolicy?policy?=?context.Policies.Get<ITypeMappingPolicy>(t,?id);

????
if?(policy?!=?null)
????
{
????????
//將方針中的翻譯對象映射給result
????????result?=?policy.Map(result);

????????
//記錄BuildUp日志
?????????TraceBuildUp(context,?t,?id,?Properties.Resources.TypeMapped,?result.Type,?result.ID????"(null)");

????????
//檢測是否能正常轉(zhuǎn)換這兩個類型
?????????Guard.TypeIsAssignableFromType(t,?result.Type,?t);

????}


?????????????????????
????
//用方針中的具體翻譯類型result.Type替換原來要創(chuàng)建的對象類型t,將修改后的創(chuàng)建責(zé)任推給下一個節(jié)點

?????
return?base.BuildUp(context,?result.Type,?existing,?result.ID);

}


???????

?

應(yīng)用舉例:

??????

class?Program
{
????
static?void?Main(string[]?args)
????
{

????????
//創(chuàng)建builder?實例
?????????Builder?builder?=?new?Builder();

????????PolicyList?policyList?
=?new?PolicyList();

????????
//創(chuàng)建自己的映射方針,目標類型typeof(MyConcreteClass),被翻譯類型typeof(MyAbstractClass),標識"myclass"

????????policyList.Set
<ITypeMappingPolicy>(new?TypeMappingPolicy(typeof(MyConcreteClass),?null),?typeof(MyAbstractClass),?"myclass");

????????MyAbstractClass?myclass?
=?builder.BuildUp<MyAbstractClass>(null,?"myclass",?null,?policyList);

????????Console.WriteLine(myclass.GetType().ToString());

?
????????Console.ReadLine();

????}


}


?

//抽象基類
public?abstract?class?MyAbstractClass
{
???
//抽象類具體定義
}


//具體實現(xiàn)類
public?class?MyConcreteClass?:?MyAbstractClass
{
???
//具體類個性化的定義
???private?string?test;

}




我們可以看到結(jié)果會輸出:

??MyConcreteClass

? 可見我們通過指定方針就可以輕松的將抽象類或者接口類映射成為具體的實例類,而且這種轉(zhuǎn)換是安全的
//檢測是否能正常轉(zhuǎn)換這兩個類型
Guard.TypeIsAssignableFromType(t,?result.Type,?t);


總結(jié)

以上是生活随笔為你收集整理的[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。