2012-03-26 48 views
6

Tôi đang làm việc trên một ứng dụng bao gồm nhiều mô đun, với một số phụ thuộc vào các mô-đun khác. Bây giờ tôi đã quyết định sử dụng Autofac để giải quyết các phụ thuộc vòng tròn và cải thiện kiến ​​trúc nói chung.autofac - sử dụng đúng trong ứng dụng đa mô-đun

Để định cấu hình autofac, tôi sử dụng phương pháp xml (http://code.google.com/p/autofac/wiki/XmlConfiguration).

Bây giờ tôi không chắc chắn về cách triển khai Autofac. Tôi có cần tham chiếu đến autofac trong mỗi module trong ứng dụng của tôi không? Có nghĩa là tôi phải đăng ký tất cả các thành phần mỗi lần tôi muốn giải quyết sự phụ thuộc ...

ContainerBuilder builder = new ContainerBuilder(); 
builder.RegisterModule(new ConfigurationSettingsReader("autofac", configPath)); 
IContainer container = builder.Build(); 
IWhatever w = container.Resolve<IWhatever>(); 

Đây có phải là cách để làm điều đó không?

Hoặc tốt hơn là Tự động điền vào một Mô-đun riêng biệt? Với phương pháp này, tôi sẽ phải đăng ký các module chỉ một lần (khi ứng dụng bắt đầu) và chỉ có thể sử dụng Autofac bọc để giải quyết phụ thuộc ...

IWhatever w = container.Resolve<IWhatever>(); 

Tôi hy vọng ai đó có thể cho tôi biết cách tốt nhất để sử dụng Tự động.

cảm ơn!

+2

Cách tốt nhất để sử dụng Autofac (hoặc bất kỳ container DI khác) là để tham khảo nó ít khi cần thiết. [Câu trả lời này] (http://stackoverflow.com/a/1410738/644812) có thể hữu ích. –

+0

cảm ơn bạn, đó là những gì tôi đang suy nghĩ quá. Tôi chỉ không chắc thực hành tốt nhất để sử dụng Autofac là gì ... – Fabian

Trả lời

-1

Mô-đun riêng biệt cho vùng chứa không chỉ là một lựa chọn tốt hơn, nó là lựa chọn duy nhất phù hợp. Các cá thể chứa container AFAIK IoC phải là các trình đơn.

Ít nhất tôi đã sử dụng Unity theo cách này - bạn tạo thể hiện tĩnh công khai của vùng chứa, khởi tạo nó khi khởi động ứng dụng và sau đó truy cập nó từ tất cả các mô-đun của bạn.

+4

Không, không và không. Có một singleton (của bất cứ điều gì) hiếm khi là một ý tưởng tốt. Có trong hầu hết các trường hợp, một giải pháp tốt hơn. Điều tương tự ở đây. – jgauffin

+0

Và đó là nó, bạn đã không cung cấp một? Bạn không thể sử dụng mã được cung cấp trong câu hỏi trong mỗi mô-đun vì điều này sẽ tạo ra rất nhiều chi phí. Tôi không biết chắc chắn, nhưng có thể là gọi builder.Build instantiates tất cả các đối tượng trong container - ý tưởng rất xấu. – vlad2135

+2

Rất nhiều chi phí? Thùng chứa được xây dựng một lần trong suốt thời gian sử dụng của ứng dụng. – jgauffin

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