2011-11-16 36 views
5

tôi có một phần của mã có phụ thuộc mà hình như sau:AutoFac: PropertyWiringFlags.AllowCircularDependencies làm gì?

public class MyPage : Page //ASPX WebForms page 
{ 
    public IPersonBl PersonBl { get; set; } 

} 

public class PersonBl : IPersonBl 
{ 

    public PersonBl(ISomeMagicBl magicBl){...} 

} 

public class SomeMagicBl : ISomeMagicBl 
{ 
    public IPersonBl PersonBl { get; set; } 

    public SomeMagicBl(/*Other dependencies*/) {...} 
} 

cấu hình mô-đun của tôi trông như sau

... 
builder.RegisterAssemblyTypes(ThisAssembly).Where(t => t.Name.EndsWith("BL")).AsImplementedInterfaces().PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies).InstancePerLifetimeScope(); 
... 

Như có thể thấy, tôi có phụ thuộc vòng tròn trong lớp học của tôi mà tôi có thể giải quyết bằng cách sử dụng ..PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies)...

Câu hỏi của tôi: Chính xác lá cờ này làm gì sau hậu trường để giải quyết các phụ thuộc vòng tròn này ??

Trả lời

3

Cờ thay đổi điểm mà tại đó việc tiêm thuộc tính được thực hiện cho loại từ thời gian xây dựng đến sau khi phần còn lại của biểu đồ đã được tạo. Nó dựa vào một hoặc nhiều thành phần trong chu kỳ có một dạng chia sẻ (singleton hoặc per-request) - ngay cả với cờ, nếu tất cả các thành phần là instance-per-dependency thì một kiểu chu trình sẽ vẫn tồn tại.

Không có cờ, Autofac xem xét tất cả các phụ thuộc của thành phần, thuộc tính hay không, là điều kiện tiên quyết để cho phép bất kỳ thành phần nào khác có tham chiếu đến nó. Theo mặc định, điều này đáng tin cậy hơn.

+0

Hoàn hảo, thx. Tôi cho rằng bạn đã áp dụng loại chiến lược như vậy, chỉ muốn chắc chắn :) – Juri

1

chỉ để tham khảo, một cách hay khác để giải quyết phụ thuộc vòng tròn là bằng cách phụ thuộc vào Func<T>, miễn là bạn không truy cập hàm func trong hàm tạo.

+0

Bạn có thể giải thích về điều này không? – Juri

+0

'Lazy ' cũng hoạt động. Các phụ thuộc hàm dựng lẫn nhau làm việc miễn là một trong các phụ thuộc sử dụng Lazy/Func làm kiểu phụ thuộc. –

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