#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. Я думаю, что это действительно запутанный ответ на вопрос.