C# 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

StructureMap IOC有问题。我希望检索基于标签或名称实现相同接口的对象的不同具体实现

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()以添加()