有没有办法初始化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 { }
答案 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");