Переадресованные типы в Microsoft Unity - PullRequest
5 голосов
/ 21 сентября 2010

Как использовать один компонент для нескольких сервисов в Unity Framework?

В Виндзоре это настраивается следующим образом:

var container = new WindsorContainer();
container.Register(Component.For<Service1, Service2>()
                            .ImplementedBy<Component>());

var service1 = container.Resolve<Service1>();
var service2 = container.Resolve<Service2>();

Идея с переадресованными типами состоит в том, что если компонент является одноэлементным service1 и service2 - это один и тот же экземпляр .

Ответы [ 2 ]

3 голосов
/ 22 сентября 2010

Этот тест проходит:

[Fact]
public void ContainerCorrectlyForwards()
{
    var container = new UnityContainer();
    container.RegisterType<IService1, MyComponent>(
        new ContainerControlledLifetimeManager());
    container.RegisterType<IService2, MyComponent>(
        new ContainerControlledLifetimeManager());

    var service1 = container.Resolve<IService1>();
    var service2 = container.Resolve<IService2>();

    Assert.Same(service1, service2);
}
0 голосов
/ 21 сентября 2010

AFAIK, вы не можете: вы должны зарегистрировать каждый сервис с одним и тем же сопоставленным компонентом:

container.RegisterType<Service1, Component>(new ContainerControlledLifetimeManager())
         .RegisterType<Service2, Component>(new ContainerControlledLifetimeManager())
...