命名实例未命中的默认实例

时间:2013-09-13 16:14:20

标签: c# structuremap

有没有办法初始化StructureMap,以便我们不会得到这个异常文本:

  

无法为PluginType ISomeInterface找到实例名称“X”。

...但是收到了类型的默认实现?

以下示例代码:

[Test]
public void OnNamedMiss()
{
    ObjectFactory.Initialize(i =>
    {
        i.For<IX>().Use<Alpha>().Named("alpha");
        i.For<IX>().Use<Bravo>().Named("bravo");
        i.For<IX>().Use<Charlie>().Named("charlie");

        // define default?
    });

    // Can I make this return Default instead of throwing?
    var x = ObjectFactory.GetNamedInstance<IX>("delta");
}

public interface IX { }
public class Default : IX { }
public class Alpha : IX { }
public class Bravo : IX { }
public class Charlie : IX { }

1 个答案:

答案 0 :(得分:1)

使用

var x = ObjectFactory.TryGetInstance<IX>("delta") ?? ObjectFactory.GetInstance<IX>();

前提是您已将Default类注册为默认实例。 Use方法注册默认实例,Add方法添加其他实例。

i.For<IX>().Use<Default>();
i.For<IX>().Add<Alpha>().Named("alpha");
i.For<IX>().Add<Bravo>().Named("bravo");
i.For<IX>().Add<Charlie>().Named("charlie");