2010-03-29 37 views
7

StructureMap newbie question.StructureMap: Cách đăng ký cùng một cá thể cho tất cả các giao diện của nó

public class SomeClass: IInterface1, IInterface2 { 
} 

Tôi muốn thử nghiệm sau đây để vượt qua:

Assert.AreSameInstance(
    container.GetInstance<IInterface1>(), 
    container.GetInstance<IInterface2>()); 

Làm thế nào tôi sẽ làm một đăng ký rõ ràng về điều này?

Tôi biết ở Lâu đài Windsor tôi sẽ làm một cái gì đó giống như

kernel.Register(Component.For(typeof(IInterface1), typeof(IInterface2)) 
    .ImplementedBy(typeof(SomeClass)); 

Nhưng tôi không thấy bất kỳ API tương đương

+1

Stick để Windsor :) –

+0

Bạn sẽ không chỉ nói với nó để khởi tạo chúng như một Singleton? – Jaxidian

+0

Vâng ... có, nhưng làm thế nào để có được cùng một cá thể singleton để thực hiện mỗi giao diện? Để rõ ràng, chỉ có một thể hiện SomeClass nên được khởi tạo. –

Trả lời

15
ObjectFactory.Initialize(x => 
{ 
    x.For<IInterface1>().Singleton().Use<MyClass>(); 
    x.Forward<IInterface1, IInterface2>(); 
}); 
+0

Cảm ơn tuyệt vời Phil! –

+0

Mẹo: Nếu cách này không hiệu quả với bạn, hãy đảm bảo bạn có hai tham số kiểu để Chuyển tiếp() đúng cách. Tôi đã bị bắt vì giả định đây là loại plugin "thay thế" đầu tiên. – Schneider

Các vấn đề liên quan