C# StructureMap IOC命名实例帮助
StructureMap IOC有问题。我希望检索基于标签或名称实现相同接口的对象的不同具体实现C# StructureMap IOC命名实例帮助,c#,.net,inversion-of-control,structuremap,objectfactory,C#,.net,Inversion Of Control,Structuremap,Objectfactory,StructureMap IOC有问题。我希望检索基于标签或名称实现相同接口的对象的不同具体实现 internal static class InstanceHelper { internal enum Taxonomy { Foo, Bar } static InstanceHelper() { // Initialize the container ObjectFact
internal static class InstanceHelper
{
internal enum Taxonomy
{
Foo,
Bar
}
static InstanceHelper()
{
// Initialize the container
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().Use<ObjectA>().Named(Taxonomy.Foo.ToString());
x.For<IMyInterface>().Use<ObjectB>().Named(Taxonomy.Bar.ToString());
});
}
internal static IMyInterface GetInstanceByTaxonomy(Taxonomy taxonomy)
{
// this raises an exception
ObjectFactory.GetNamedInstance<IMyInterface>(taxonomy.ToString());
}
}
内部静态类InstanceHelper
{
内部枚举分类法
{
福,
酒吧
}
静态InstanceHelper()
{
//初始化容器
ObjectFactory.Initialize(x=>
{
x、 For().Use().Named(Taxonomy.Foo.ToString());
x、 For().Use().Named(Taxonomy.Bar.ToString());
});
}
内部静态IMI接口GetInstanceByTaxonomy(分类法分类法)
{
//这引发了一个例外
GetNamedInstance(taxonomy.ToString());
}
}
文档在这方面不是很好,似乎所有的例子都不推荐。。。使用版本2.6.1.0
谢谢。使用
AddInstances
方法添加命名实例
ObjectFactory.Initialize(x =>
{
x.For<IMyInterface>().AddInstances(i =>
{
i.Type<ObjectA>().Named("Foo");
i.Type<ObjectB>().Named("Bar");
});
});
ObjectFactory.Initialize(x=>
{
x、 For().附加说明(i=>
{
i、 Type()。命名为(“Foo”);
i、 Type()。命名为(“Bar”);
});
});
这对我来说是可行的,但我确实同意文档在不同版本之间有时会有相当大的误导性,我花了一段时间才第一次了解到这一点。原始方法和amarsuperstar的方法似乎都是可行的,问题是类“ObjectA”的范围已声明为内部,以及一个内部构造函数。我把它改成了公共的,现在国际奥委会可以看到了。。。在StructureMap程序集中发生反向反射。我真傻。将调用更改为Use()以添加()