c# - StructureMap IOC 命名实例帮助

标签 c# .net inversion-of-control structuremap objectfactory

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

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

谢谢。

最佳答案

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

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

这对我有用,但我同意文档有时会在版本之间产生误导,我花了一些时间才第一次了解这一点。

关于c# - StructureMap IOC 命名实例帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785737/

相关文章:

asp.net-mvc - ASP.NET MVC 中的自定义主体

c# - 如何构造函数注入(inject)仅在运行时已知的字符串? (温莎城堡)

javascript - AngularJS 在 Xamarin Android Webview 中不工作

c# - 从 Javascript 调用 MVC Controller 时为空值

c# - 在 asp.net 中使用 System.Timers.Timer

c# - C#中多维数组的源码是如何生成的

java - Spring IoC 的轻量级替代品——可能针对 Android 设备

c# - 如何将redis中的数据保存到磁盘中的文件并读回redis?

c# - USB HID col参数是什么

.net - NServiceBus 与 Unity 2.0?