2010-04-26 127 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的方法。