Structuremap ioc именованные экземпляры помогают
-
05-10-2019 - |
Вопрос
Исходя с проблемой со структурой 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");
});
});
Это работает для меня, однако я согласен, что документация иногда может быть в заблуждении между версиями, и мне потребовалось некоторое время, чтобы добраться до этого впервые.