Hãy tưởng tượng tôi có dưới đây:Đăng ký một singleton qua SimpleInjector và trở về cùng một ví dụ, đối với các giao diện khác nhau nó thực hiện
public interface IocInterface1 { }
public interface IocInterface2 { }
public class IocImpl : IocInterface1, IocInterface2 { }
Tôi muốn rằng nếu tôi cố gắng để có được bất kỳ trường hợp của các lớp trên/interfaces qua IoC, tôi nhận được cùng một ví dụ, không phải một singleton cho mỗi loại. Ví dụ, b1
và b2
dưới đây sẽ là sự thật:
_container.RegisterSingle<IocInterface1, IocImpl>();
_container.RegisterSingle<IocInterface2, IocImpl>();
_container.RegisterSingle<IocImpl, IocImpl>();
var test1 = _container.GetInstance<IocInterface1>();
var test2 = _container.GetInstance<IocInterface2>();
var test3 = _container.GetInstance<IocImpl>();
bool b1 = test1 == test2;
bool b2 = test2 == test3;
Đây có phải là có thể?
Điều này có vẻ tốt cho những gì tôi cần - Tuy nhiên, nó có phục vụ cho 'container.RegisterSingleOpenGeneric()' không? Lý do là tôi có một máy quét lắp ráp quét tất cả các loại mà tôi trang trí với một thuộc tính tùy chỉnh mà tôi đã tạo ra '[IocComponent]', và điều này cũng phục vụ cho các thế hệ mở. –
'RegisterSingleOpenGeneric' hoạt động hơi khác một chút vì nó đang tạo đăng ký trên bay trong sự kiện' ResolveUnregisteredType' ... Tôi phải suy nghĩ về cách nó có thể được thực hiện mà không thay thế logic của phương thức 'RegisterSingleOpenGeneric'. Nhưng tôi nghĩ bạn nên hỏi đây là một câu hỏi tiếp theo, nơi bạn chỉ định chi tiết về cách quét hoạt động và cách nó cố gắng đăng ký các loại chung. – nemesv
Tôi đồng ý với @nemesv: vui lòng đặt câu hỏi mới với các chi tiết này. Câu trả lời này là chính xác. 1 cho điều đó. – Steven