我正在使用StructureMap 2.6.1
这是Bootstrapper.cs的代码:
ObjectFactory.Initialize(x => x.For<IFoo>().Use<Foo>());
当我运行应用程序时,我得到以下异常:
未定义默认实例 PluginFamily IFoo的, 版本= 1.0.0.0, Culture = neutral,PublicKeyToken = null
当我使用这个过时的代码时,我没有异常:
ForRequestedType<IFoo>()
.TheDefault.Is.OfConcreteType<Foo>();
有人能告诉我ObjectFactory初始化程序的最新语法吗? 谢谢。
答案 0 :(得分:3)
每次调用Initialize时,都会重置ObjectFactory。即在以下场景中:
ObjectFactory.Initialize(x => x.For<IFoo>().Use<Foo>());
ObjectFactory.Initialize(x => x.For<IBaz>().Use<Baz>());
您实际上只将IBaz
映射到Baz
。
您应该使用ApplicationRegistry:
public class ApplicationRegistry : Registry
{
public ApplicationRegistry()
{
For<IFoo>().Use<Foo>();
For<IBaz>().Use<Baz>();
}
}
并在Initialize方法中使用它:
ObjectFactory.Initialize(x => x.AddRegistry(new ApplicationRegistry()));