2010-05-18 19 views
6

Thực tiễn tốt là có phương pháp Nhà máy để truy xuất các đối tượng được tiêm hoặc liệu có được sử dụng phương pháp nhà máy từ khung DI không?Sử dụng Nhà máy để lấy các đối tượng được tiêm

Tôi đang sử dụng bản đồ cấu trúc, tôi chỉ nên sử dụng ObjectFactory.GetInstance() ;, hoặc tôi nên tạo lớp nhà máy và bên trong lớp này gọi ObjectFactory.GetInstance() ;? bởi vì nếu tôi gọi ObjectFactory.GetInstance(); trong các lớp học của tôi, tôi sẽ tạo ra sự liên kết với khung DI? xin lỗi nếu tôi không biết gì, tôi mới làm quen với các khái niệm này. Cảm ơn!

Trả lời

3

Nếu bạn đang sử dụng khung DI vì sao lại triển khai lại mẫu nhà máy khi nó đã được khung công tác cung cấp? Ngoài ra, bạn không nên tạo sự phụ thuộc với khung công tác DI trong các lớp nghiệp vụ của ứng dụng. Ở đó bạn nên trừu tượng hóa với các giao diện và các lớp trừu tượng. Khung DI chỉ nên được sử dụng ở mức cao nhất, ví dụ trong GUI để thực hiện hệ thống ống nước của các lớp thấp hơn và chọn ví dụ một lớp truy cập dữ liệu thích hợp.

+1

Tôi đồng ý với Darin, hãy để khuôn khổ DI làm điều đó là công việc thay vì sao chép chức năng. –

3

Phương pháp nhà máy hữu ích khi bạn cần kiểm soát chi tiết hơn khi bạn cần phiên bản. Tuy nhiên, bạn không nên phụ thuộc trực tiếp vào chính thùng chứa mà đúng hơn là tiêm một phương thức nhà máy làm phụ thuộc. Dưới đây là một ví dụ minh họa này:

public class SomeController 
{ 
    private Func<ISomeService> _serviceFactory; 
    public SomeController(Func<ISomeService> serviceFactory) 
    { 
     _serviceFactory = serviceFactory; 
    } 

    public void DoSomeWork() 
    { 
     var service = _serviceFactory(); 
     .... 
    } 
} 

Mã đăng ký StructureMap sẽ giống như thế này:

var container = new Container(cfg => 
    cfg.For<ISomeService>().Use(() => new SomeServiceImpl()) 
); 
Các vấn đề liên quan