Вопрос

Исходя с проблемой со структурой 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

Благодарю.

Это было полезно?

Решение 2

Как оригинальный путь, и путь AmarsupperStar, по-видимому, на самом деле работает, проблема заключалась в том, что объем класса «Objecta» был объявлен как внутренний, наряду с внутренним конструктором. Я изменил это на публику, и теперь МОК может видеть это ... Обратное отражение происходит в узле структуры. Дох глупые мне.

Другие советы

Твой, используя AddInstances Способ добавить ваши именованные экземпляры

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

Это работает для меня, однако я согласен, что документация иногда может быть в заблуждении между версиями, и мне потребовалось некоторое время, чтобы добраться до этого впервые.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top