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

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

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

MyService : IService1, IServier2 {}

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

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

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

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

Ответы на вопрос(3)

Решение Вопроса

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

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

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

 05 мая 2015 г., 15:44
Это также работает с HierarchicalLifetimeManager.
 13 нояб. 2015 г., 02:40
Можете ли вы дать эквивалент в app.config XML-синтаксис?

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

@ 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" не является обязательным и требуется только если вы планируете делатьименованные экземпляры.

Ваш ответ на вопрос