Các ứng dụng tôi đang làm việc trên là dựa vào Autofac như DI container và một trong những lý do khiến tôi quyết định sử dụng nó, trong số những người khác, là tính năng nhà máy đại biểu (xem here)Dịch vụ Định vị dễ sử dụng hơn là phụ thuộc Tiêm?
này làm việc tốt cho tất cả các trường hợp nơi tôi cần tạo lại các phần tử giống nhau nhiều lần như trường hợp của một số báo cáo và màn hình có liên quan. Một số báo cáo (thậm chí cả các báo cáo cùng loại) được thực thi đồng thời nhưng chúng chỉ thay đổi bởi các tham số do người dùng định nghĩa để tạo các trường hợp để tạo các cá thể, chuyển các tham số miễn phí và để phần còn lại ứng dụng.
Sự cố xảy ra với thực tế là mỗi báo cáo được tạo thành từ một số lượng báo cáo phụ (nhiệm vụ) khác nhau và mỗi tác vụ thực hiện giao diện ITask. Mỗi báo cáo có thể có tối đa 50 tác vụ khác nhau để sử dụng và mỗi tác vụ đóng gói một hoạt động kinh doanh chính xác. Một lựa chọn tôi có là tiêm các nhà máy ủy nhiệm và tạo chúng khi cần.
Những nhiệm vụ đã được tự động tạo ra bởi các nhà máy và một cái gì đó như:
var myTaskA = _taskFactoryConcreteTaskA();
var myTaskB = _taskFactoryConcreteTaskB();
var myTaskC = _taskFactoryConcreteTaskC();
...
var myTaskZZ = = _taskFactoryConcreteTaskZZ();
đòi hỏi rất nhiều dây bằng tay (đại biểu, nhà xây dựng, ủng hộ các lĩnh vực vv) trong khi một cái gì đó giống như
var myTaskA = _taskFactory.Create<ConcreteTaskA>();
var myTaskB = _taskFactory.Create<ConcreteTaskB>();
var myTaskC = _taskFactory.Create<ConcreteTaskC>();
...
var myTaskZZ = _taskFactory.Create<ConcreteTaskZZ>();
sẽ là công việc cực kỳ ít đặc biệt là nếu _taskFactory kết thúc tốt đẹp vùng chứa như được hiển thị trong this other post, nhưng về cơ bản nó có nghĩa là tôi đang sử dụng một trình định vị dịch vụ để tạo các nhiệm vụ của mình.
Tôi có các tùy chọn nào khác có thể phù hợp để giải quyết vấn đề này?
(Chú ý: có một cơ hội tốt cho tôi hoàn toàn khỏi đường đua và rằng tôi phải đọc nhiều hơn về DI, trong trường hợp bất kỳ đóng góp sẽ được thậm chí quan trọng hơn)
Martin Fowler đã viết về vấn đề này một chút: http://martinfowler.com/articles/injection.html#UsingAServiceLocator – mwilson
Cảm ơn, đây là những gì khiến tôi suy nghĩ lại về bài viết mà rất nhiều: http: //blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx (và thuyết phục tôi mua sách, vẫn đang đợi sách) – mhttk