Вопрос по unity-container – Зарегистрируйте один и тот же тип для нескольких интерфейсов

11

Можно ли зарегистрировать один тип для нескольких интерфейсов?

У меня есть класс, который реализует два интерфейса

MyService : IService1, IServier2 {}

Я хотел бы зарегистрировать этот тип для обоих интерфейсов.

container.RegisterType<IService1, MyService>(CreateLifetime());
container.RegisterType<IService2, MyService>(CreateLifetime());

К сожалению, после разрешения у меня есть два разных случая. Я пытался использовать общее время жизни, но затем я получил сообщение, что не могу.

Similar question, Если вы используетеContainerControlledLifetimeManager достаточно зарегистрировать первое отображениеIService1 - & GT;MyService с этой жизнью. Sebastian Weber

Ваш Ответ

3   ответа
0

<register type="MyService" name="MyServiceName">
    <lifetime type="singleton" />
</register>
<register type="IService1" mapTo="MyService" />
<register type="IService2" mapTo="MyService" />
Это не работает Resolve & lt; IService1 & gt; () и Resolve & lt; IService2 & gt; () возвращают 2 разных экземпляра.
0

@ StephenTunney's answerно я не смог заставить его работать.

Вы также можете сделать это с помощью конфигурации:

<register type="MyService" name="MyServiceName">
    <lifetime type="singleton" />
</register>
<register type="IService1" mapTo="MyService">
    <lifetime type="singleton" />
</register>
<register type="IService2" mapTo="MyService">
    <lifetime type="singleton" />
</register>

Обратите внимание, чтоname="MyServiceName" не является обязательным и требуется только если вы планируете делатьименованные экземпляры.

16

      .RegisterType<MyService>(CreateLifeTime())
      .RegisterType<IService1, MyService>()
      .RegisterType<IService2, MyService>();

Конечно, с TransientLifetimeManager вы все равно получите два разных экземпляра MyService.

Код выше работает сPerResolveLifetimeManager, PerResolveLifetimeManager, PerThreadLifetimeManager.

Можете ли вы дать эквивалент в app.config XML-синтаксис?
Это также работает с HierarchicalLifetimeManager.

Похожие вопросы