2010-04-26 73 views
2

我在我的項目中使用結構映射。要注入不同的存儲庫實現,我希望在app.config中進行切換,這會將存儲庫的所有實際實現更改爲模擬存儲庫。基於app.config中設置的結構映射配置更改

比方說IRepository有兩個實現RealRepository和MockRepository

ForRequestedType() .TheDefaultIsConcreteType();

我想在的app.config/web.config中的開關說(模擬= 1),這改變了所有實庫實施

ForRequestedType() .TheDefaultIsConcreteType();

我不想在app.config中編寫整個插件定義,只需要一個開關,我該如何實現這個?

回答

2

雖然看起來很奇怪,但請記住,您的StructureMap註冊碼仍然只是C#,並且您可以使用該語言的全部功能。這意味着您可以在需要時自由使用「if」語句。由於您的條件基於app.config,因此無需考慮運行時更改的值 - 您可以在啓動配置時安全地使用該值。

if (appConfigIndicatesMockMode()){ 
    ForRequestedType<IRepository>().TheDefaultIsConcreteType<MockRepository>() 
} else { 
    ForRequestedType<IRepository>().TheDefaultIsConcreteType<RealRepository>() 
} 

其中appConfigIndicatesMockMode()是讀取在通常的方式的app.config設置並返回true或false的方法。