0

有没有办法初始化 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 { }
4

1 回答 1

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");
于 2013-09-14T10:49:08.690 回答