Как зарегистрировать несколько типов, которые реализуют один и тот же интерфейс - PullRequest
3 голосов
/ 24 мая 2011

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

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

Ответы [ 2 ]

6 голосов
/ 22 сентября 2011

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

        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")));
0 голосов
/ 25 мая 2011

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

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

например.

у вас есть

ClassA: IClass и Класс B: IClass верно?

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

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

RegisterType IClass, ClassA> ("TypeA");
RegisterType IClass, ClassB> ("TypeB");

Разрешить IClass> ("TypeA");
Разрешить IClass> ("TypeB");

имеет смысл?

...