结构图配置根据app.config中的设置进行更改

时间:2010-04-26 01:01:28

标签: c# structuremap ioc-container

我在我的项目中使用了structuremap。为了注入存储库的不同实现,我希望在app.config中有一个开关,它可以将存储库的所有实际实现更改为模拟存储库。

让我们说IRepository有两个实现RealRepository和MockRepository

ForRequestedType()                 .TheDefaultIsConcreteType();

我希望在app.config / web.config中有一个开关说(Mock = 1),它将所有真实的存储库实现更改为

ForRequestedType()                 .TheDefaultIsConcreteType();

我不想在app.config中编写整个插件定义,只想要一个开关,我该如何实现呢?

1 个答案:

答案 0 :(得分:2)

虽然看起来很奇怪,但请记住您的StructureMap注册码仍然只是C#,并且您可以使用该语言的全部功能。这意味着您可以在需要时自由使用“if”语句。由于您的条件基于app.config,因此您无需考虑在运行时更改的值 - 您可以在启动配置时安全地使用该值。

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

其中appConfigIndicatesMockMode()是一种以通常方式读取app.config设置并返回true或false的方法。