2010-09-21 3 views
5

Come utilizzare un singolo componente per più servizi in Unity Framework?Tipi inoltrati in Microsoft Unity

a Windsor è configurato nel modo seguente:

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

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

L'idea con tipi inoltrati è che se il componente è un Singleton service1 e service2sono la stessa istanza.

risposta

3

Questo test passa:

[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

Grazie! Ma lo sapevate che il test passerà anche se rimuovete ContainerControlledLifetimeManager() per IService1 o IService2? Chi ha deciso che ContainerControlled sostituirà la durata del Transitorio (per i componenti con lo stesso nome - il nome predefinito nel nostro caso)? –

+0

Questo è davvero sorprendente. Non ho una buona spiegazione per questo. In effetti, sarei tentato di registrarlo come un bug ... –

+0

Con Unity 1.2 il test fallisce senza ContainerControlledLifetimeManager – onof

0

per quanto ne so, non è possibile: è necessario registrarsi ogni servizio con lo stesso componente mappato:

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

wow, che è abbastanza intuitivo –

+0

vuol davvero fare tipi inoltrati? O registra due componenti separati. Vedi domanda aggiornata. –

+0

Questa risposta genera due istanze diverse quando si risolvono Service1 e Service2 poiché la durata predefinita in Unity è Transient. –