A.簡單的問題。統一:默認和條件解析
我有3個「存儲庫」實例取決於「配置」。
class Manager{
public Manager(Configuration conf){
...
3個實例解決策略:
container.RegisterType<Repository>("ForService1");
container.RegisterType<Repository>("ForService2");
container.RegisterType<Repository>("ForService3");
(3,因爲它們具有不包含到樣品的附加參數,即總是不同的參數)
和「默認」的配置
container.RegisterType<Configuration>(new InjectionConstructor(new object[] { false, true }));
我想提供重新定義t他在配置文件中配置一個且只有一個實例。
<register type="Configuration"
name="**ForService2**">
<constructor>
<param name = "useOptimization1" value="True"/>
<param name = "useOptimization2" value="True"/>
</constructor>
</register>
,並希望避免有在擴展類似三重配置:
container.RegisterType<Configuration>("ForService1", new InjectionConstructor(new object[] { false, true }));
container.RegisterType<Configuration>("ForService1", new InjectionConstructor(new object[] { false, true }));
container.RegisterType<Configuration>("ForService2", new InjectionConstructor(new object[] { false, true }));
這可能嗎?怎麼樣?
B.複雜的問題。
我感覺IoC工具不是關於配置。嘗試配置基礎設施丟棄IoC配置文件 - 又是一個反模式。或更短:「配置信息數據不是依賴性」。我對嗎?
讓我們觀察EntLib的列表器配置。 真的,EntLib的日誌監聽器配置是「後期綁定」還是「配置方式」?首先,這是「後期綁定」(因爲我們指出了類型名稱 - 要創建哪個程序集和Loa以及對象),這也是「配置」(我們有自定義配置部分)。我覺得大多數IoC追隨者會選擇容器的啓用「配置」,對嗎? 但EntLib人選擇配置部分。 可能是這個自定義配置部分日誌監聽器的配置將改變容器的配置,並且「監聽器配置」應該如何與容器配置相關?
謝謝你的回答,馬克。但是我需要補充一點,在閱讀「首選代碼作爲配置」鏈接後,我仍然不同意你的配置和「後期綁定」之間有明確的粗線。我已經向該問題添加了示例。 –