Как зарегистрировать несколько типов, реализующих один и тот же интерфейс

#unity-container #enterprise-library

#unity-контейнер #корпоративная библиотека

Вопрос:

У меня один интерфейс, и он используется двумя классами. Я использую конфигурацию Unity для идентификации экземпляра на основе интерфейса.

Теперь я хочу знать, как мне следует зарегистрировать эти типы, чтобы я мог вызвать соответствующую реализацию на основе самого единого интерфейса.

Комментарии:

1. Извините, я не понимаю вашего вопроса. Но у вас будет доступ только к элементу, определенному в интерфейсе. Опубликуйте, пожалуйста, какой-нибудь код по этому поводу.

Ответ №1:

Вот как я это делаю:

         var container = new UnityContainer().RegisterType<IAmImplementedMoreThanOnce, Implementation1>("Implementation1")
                                            .RegisterType<IAmImplementedMoreThanOnce, Implementation2>("Implementation2")
                                            .RegisterType<IHaveDependencies1, WithDependenciesImplementation1>(new InjectionConstructor(new ResolvedParameter<IAmImplementedMoreThanOnce>("Implementation1")))
                                            .RegisterType<IHaveDependencies2, WithDependenciesImplementation2>(new InjectionConstructor(new ResolvedParameter<IAmImplementedMoreThanOnce>("Implementation2")));
  

Комментарии:

1. Я использую общедоступные статические свойства типов, доступные только для чтения, для доступа к его имени.

Ответ №2:

вы должны зарегистрировать экземпляр любого типа, который вы хотите. Если вы зарегистрируете оба типа для одного и того же интерфейса, вы получите только один. Один интерфейс для каждого типа, или вы предоставляете входной параметр для регистрируемого вами типа. Он действует как контейнер, вы помещаете в него свои данные и получаете их обратно в любое время, когда захотите, с правильным ключом.

Либо вы должны создать еще два интерфейса для ваших двух типов, которые являются производными от родительского интерфейса, и зарегистрировать эти два интерфейса для ваших двух типов, либо использовать входные параметры.

например

у вас есть

ClassA: iCLASS и ClassB: iCLASS правильно?

Итак, это будет похоже; ClassA : IClassA , ClassB : IClassB и IClassA: iCLASS , IClassB: iCLASS и зарегистрировать IClassA для ClassA и IClassB для ClassB.

входные параметры

Тип регистрации iCLASS, ClassA>(«TypeA»);
Тип регистрации iCLASS, ClassB>(«TypeB»);

Разрешить iCLASS>(«TypeA»);
Разрешить iCLASS>(«TypeB»);

имеет смысл?

Комментарии:

1. В корпоративной библиотеке HOL я видел пример, в котором мы можем различать эти ссылки, используя атрибут name при регистрации типа. Я проверю это и вернусь к вам..

2. изменил мой пост для входного параметра, если это то, о чем вы говорили.

3. Я думаю, что это действительно запутанный ответ на вопрос.