3

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());

    }
}

在这方面文档不是很好,似乎所有示例都已弃用......使用版本 2.6.1.0

谢谢。

4

2 回答 2

1

您使用该AddInstances方法添加您的命名实例

ObjectFactory.Initialize(x =>
{
    x.For<IMyInterface>().AddInstances(i =>
    {
        i.Type<ObjectA>().Named("Foo");
        i.Type<ObjectB>().Named("Bar");
    });
});

这对我有用,但是我确实同意文档有时会在版本之间产生很大的误导性,我第一次花了一段时间才明白这一点。

于 2010-09-24T09:39:48.597 回答
0

原始方式和 amarsuperstar 的方式似乎都有效,问题是类“ObjectA”的范围已被声明为内部,以及内部构造函数。我将其更改为 Public,现在 IOC 可以看到它...... StructureMap 程序集中正在发生反向反射。多傻我。

于 2010-09-24T10:37:38.797 回答