2010-08-05 35 views
11

giả kịch bản này:Phải đăng ký mọi lớp học trước khi hộp chứa autofac có thể giải quyết?

public class B {}; 

public class C 
{ 
    public C(B b){} 
} 

Để giải quyết C từ Autofac container, tôi phải đăng ký cả B và C để chứa. Nhưng, hôm nay tôi đã sử dụng Unity, có vẻ như tôi chỉ cần đăng ký B cho vùng chứa, sau đó C có thể được giải quyết.

Vì vậy, Autofac không thể làm như Unity làm?

Trả lời

20

Với Autofac vượt trội, mọi loại bạn muốn sử dụng được đăng ký với vùng chứa, hoặc trực tiếp sử dụng phương pháp Register... hoặc hàng loạt bằng cách sử dụng RegisterAssemblyTypes. Nhưng cũng có những lựa chọn khác, hãy xem Nicholas article about resolving everything. Vì vậy, có, Autofac có thể làm những gì Unity làm, nhưng bạn sẽ phải kích hoạt nó.

Cập nhật: trên thực tế, các "giải quyết bất cứ điều gì" tính năng được xây dựng-in bây giờ, và bạn có thể làm như sau:

 var cb = new ContainerBuilder(); 
     cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); 
     return cb.Build(); 

Với AnyConcreteTypeNotAlreadyRegisteredSource bạn thực sự có thể giải quyết cả hai CB mà không cần đăng ký bất kỳ của họ.

Lưu ý rằng tuổi thọ của các dịch vụ được giải quyết bởi AnyConcreteTypeNotAlreadyRegisteredSource sẽ là "per dependency scope".

Lưu ý:this topic tại nhóm thảo luận Autofac có liên quan.

+0

cảm ơn. đó là câu hỏi của tôi trong nhóm thảo luận. – Benny

+0

Tuổi thọ mặc định của AnyConcreteTypeNotAlreadyRegisteredSource – JJS

+0

@JJS - đó là thời gian mặc định của Autofac-in-chung, là "mỗi phạm vi phụ thuộc" (ref https://code.google.com/p/autofac/wiki/InstanceScope) –

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