我在我的项目中使用了structuremap。为了注入存储库的不同实现,我希望在app.config中有一个开关,它可以将存储库的所有实际实现更改为模拟存储库。
让我们说IRepository有两个实现RealRepository和MockRepository
ForRequestedType() .TheDefaultIsConcreteType();
我希望在app.config / web.config中有一个开关说(Mock = 1),它将所有真实的存储库实现更改为
ForRequestedType() .TheDefaultIsConcreteType();
我不想在app.config中编写整个插件定义,只想要一个开关,我该如何实现呢?
答案 0 :(得分:2)
虽然看起来很奇怪,但请记住您的StructureMap注册码仍然只是C#,并且您可以使用该语言的全部功能。这意味着您可以在需要时自由使用“if”语句。由于您的条件基于app.config,因此您无需考虑在运行时更改的值 - 您可以在启动配置时安全地使用该值。
if (appConfigIndicatesMockMode()){
ForRequestedType<IRepository>().TheDefaultIsConcreteType<MockRepository>()
} else {
ForRequestedType<IRepository>().TheDefaultIsConcreteType<RealRepository>()
}
其中appConfigIndicatesMockMode()
是一种以通常方式读取app.config设置并返回true或false的方法。