2010-09-21 6 views
5

Làm thế nào để sử dụng một thành phần cho nhiều dịch vụ trong Unity Framework?Các loại chuyển tiếp trong Microsoft Unity

Trong Windsor nó được cấu hình theo cách sau:

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

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

Ý tưởng với các loại chuyển tiếp là nếu thành phần này là một singleton service1service2đều giống nhau dụ.

Trả lời

3

thử nghiệm này đi:

[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

Cảm ơn bạn! Nhưng bạn có biết rằng kiểm tra sẽ vượt qua ngay cả khi bạn loại bỏ ContainerControlledLifetimeManager() cho IService1 hoặc IService2? Ai quyết định rằng ContainerControlled sẽ ghi đè tuổi thọ thoáng qua (cho các thành phần có cùng tên - tên mặc định trong trường hợp của chúng ta)? –

+0

Điều đó thực sự đáng ngạc nhiên. Tôi không có lời giải thích tốt cho điều đó. Trong thực tế, tôi sẽ bị cám dỗ để đăng nhập đó như là một lỗi ... –

+0

Với Unity 1,2 kiểm tra không thành công mà không có ContainerControlledLifetimeManager – onof

0

AFAIK, bạn không thể: bạn phải đăng ký mỗi dịch vụ với các thành phần ánh xạ giống nhau:

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

wow, đó là khá unintuitive –

+0

Liệu nó thực sự làm các loại được chuyển tiếp? Hoặc đăng ký hai thành phần riêng biệt. Xem câu hỏi được cập nhật. –

+0

Câu trả lời này dẫn đến hai trường hợp khác nhau khi bạn giải quyết Service1 và Service2 vì thời gian mặc định trong Unity là Tạm thời. –