在StructureMap中有条件地配置实例

时间:2014-09-08 19:40:47

标签: inversion-of-control structuremap

抢先rtfm免责声明:StructureMap的文档是一个过时的主要版本,它所记录的API甚至不再存在,更不用说标记为过时的属性。

我有一个环境设置,对于所有意图和目的,可以将其视为静态应用程序范围的布尔值。这个布尔值的结果需要控制插入我的接口的哪个实现。条件的sample documentation对于我正在寻找的东西是完美的,但3.1.1.134中没有这些方法(最新的NuGet截至9/8/2014)。

我正在寻找以下伪语法的当前版本,并且不要让" GetEnvironmentVariable"是一个红色的鲱鱼 - 它只是一个运行时系统范围的布尔值的例子,需要在图形构建上进行评估。

public ConditionalInjectionRegistry : Registry 
{
    For<IBehavior>().UseConditionally(u => 
    {
        u.Conditionally(() => Environment.GetEnvironmentVariable("foo") == "bar")).Is<FooedBehavior>();
        u.Default.Is<NormalBehavior>();
    });
}

1 个答案:

答案 0 :(得分:2)

根据mailing list,现在正确的方法是使用Use()内的lambda。

For<IIndexResolver>().Use("some description for diagnostics", c => {
  // and just do it all with a single anonymous lambda
});