Tôi đã đọc toàn bộ chủ đề này, hai lần và tôi nghĩ mọi người đang phản hồi bằng những gì họ biết chứ không phải bởi những gì được hỏi.
Câu hỏi ban đầu của JP có vẻ như anh ta đang xây dựng các đối tượng bằng cách gửi một bộ giải quyết, và sau đó là một nhóm các lớp, nhưng chúng tôi cho rằng các lớp / đối tượng đó là chính các dịch vụ, đã sẵn sàng để tiêm. Nếu họ không thì sao?
JP, nếu bạn đang tìm cách tận dụng DI và mong muốn vinh quang pha trộn dữ liệu theo ngữ cảnh, thì không có mẫu nào trong số này (hoặc được cho là "chống mẫu") giải quyết cụ thể điều đó. Nó thực sự nắm bắt được việc sử dụng một gói sẽ hỗ trợ bạn trong một nỗ lực như vậy.
Container.GetSevice<MyClass>(someObject1, someObject2)
... định dạng này hiếm khi được hỗ trợ. Tôi tin rằng khó khăn trong việc lập trình hỗ trợ như vậy, được thêm vào hiệu năng khốn khổ sẽ liên quan đến việc triển khai, khiến nó không hấp dẫn đối với các nhà phát triển mã nguồn mở.
Nhưng nó nên được thực hiện, bởi vì tôi có thể tạo và đăng ký một nhà máy cho MyClass'es và nhà máy đó sẽ có thể nhận dữ liệu / đầu vào không bị đẩy vào làm "dịch vụ" chỉ vì mục đích thông qua dữ liệu. Nếu "chống mẫu" là về hậu quả tiêu cực, thì việc buộc các loại dịch vụ nhân tạo để truyền dữ liệu / mô hình chắc chắn là tiêu cực (ngang bằng với cảm giác của bạn về việc gói các lớp của bạn vào một thùng chứa.
Có những khung có thể giúp, mặc dù, ngay cả khi chúng trông hơi xấu xí. Ví dụ: Ninject:
Tạo một cá thể bằng Ninject với các tham số bổ sung trong hàm tạo
Đó là đối với .NET, rất phổ biến và vẫn chưa được rõ ràng như vậy, nhưng tôi chắc chắn rằng có bất cứ thứ gì trong ngôn ngữ bạn chọn sử dụng.