2010-09-21 24 views
5

Unity Framework'te birden fazla hizmet için tek bileşen nasıl kullanılır?Microsoft Unity'deki Yönlendirilen Türler

Windsor yılında aşağıdaki şekilde yapılandırıldı: iletilen türleriyle

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

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

fikri bileşeni Singleton ise service1 ve service2aynı örneği olmasıdır.

cevap

3

Bu test geçer:

[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

Teşekkür ederiz! Ancak, CONControlledLifetimeManager() öğesini IService1 veya IService2 için kaldırsanız bile testin geçeceğini biliyor muydunuz? ContainerControlled'in Transient ömrünü geçersiz kılacağına kim karar verdi (aynı isimde bileşenler için - bizim durumumuzdaki varsayılan isim)? –

+0

Bu gerçekten şaşırtıcı. Bunun için iyi bir açıklamam yok. Aslında, bir hata olarak günlüğe kaydetmek için cazip olurdum ... –

+0

Unity 1.2 ile bu test ContainerControlledLifetimeManager – onof

0

AFAIK, yapamazsınız:

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

vay, bu –

+0

gerçekten yapmak mu oldukça unintuitive var aynı eşlenen bileşeni ile her bir hizmeti kayıt var iletilen türler? Ya da iki ayrı bileşeni kaydeder. Güncellenmiş soruya bakın. –

+0

Bu yanıt, Service1 ve Service2'yi çözdüğünüzde iki farklı durumda sonuçlanır, çünkü Birlik'teki varsayılan ömür Geçicitir. –