Làm thế nào để bạn quản lý cấu hình với tiêm phụ thuộc?


18

Tôi là một fan hâm mộ lớn của DI / IOC. Nó là tuyệt vời để xử lý / trừu tượng hóa các phụ thuộc cứng, và làm cho cuộc sống dễ dàng hơn một chút.

Tuy nhiên tôi có một nắm nhỏ với nó, mà tôi không biết làm thế nào để giải quyết.

Ý tưởng cơ bản trong DI / IOC là khi một đối tượng được khởi tạo, tất cả các phụ thuộc của nó được điền sẵn trong hàm tạo.

Tuy nhiên IMHO có một số loại tham số cho các nhà xây dựng (đặc biệt là khi các đối tượng của bạn là bất biến).

  1. Phụ thuộc (Đối tượng cần thiết để đối tượng của bạn thực hiện công việc)
  2. Cấu hình (thông tin về môi trường cần thiết để làm việc)
  3. Các tham số (Dữ liệu được thực hiện trên)

Tôi thấy rằng IOC hoạt động tốt với các phụ thuộc. Nhưng tôi vẫn đang cố gắng tìm ra cách tốt nhất để đối phó với hai người kia. Tuy nhiên, vì hàm tạo được chạy có nghĩa là được chạy bởi bộ chứa IOC, nên có vẻ như tôi cần đặt các mục này vào bộ chứa IOC.

Tôi muốn biết những chiến lược / mô hình mà mọi người sử dụng và những lợi thế và bất lợi mà mọi người đã tìm thấy.

Lưu ý Tôi biết rằng đây là một câu hỏi mang tính chủ quan cao và đã cố gắng biến nó thành một câu hỏi chủ quan "tốt" theo hướng dẫn của SE.


Theo "Cấu hình", bạn có nghĩa là cấu hình môi trường dev (như Phát triển hoặc Sản xuất)? Nếu vậy, tôi thường xử lý đó như là một phụ thuộc truyền thống.
MetaFight

Tốt nhất để xây dựng với các phụ thuộc nhưng cấu hình mặc định để đối tượng được hình thành tốt. Gọi các phương thức bổ sung để đặt cấu hình và các tham số khác. Làm quá nhiều trong ctor là một điều xấu.
david.pfx

I am still trying to work out the best way to deal with the other two- Truyền chúng vào như các tham số bình thường cho đối tượng của bạn?
Robert Harvey

@RobertHarvey đối tượng bất biến? Chúng làm cho việc gỡ lỗi dễ dàng hơn nhiều.
ArTs

Câu trả lời:


9

Cấu hình (thông tin về môi trường cần thiết để làm việc)

Tạo một lớp cấu hình (để cầu kỳ: một giao diện + triển khai) nhằm mục đích cung cấp thông tin về môi trường. Điều này làm cho cấu hình không có cách nào khác với các đối tượng khác cần thiết để đối tượng của bạn thực hiện công việc (điểm 1).

Các tham số (Dữ liệu được thực hiện trên)

Trong môi trường hướng đối tượng, các kiểu dữ liệu nguyên thủy có thể được gói gọn trong các đối tượng, vì vậy điều này cũng dẫn đến điểm 1. Nhưng bạn có thể sẽ thấy câu hỏi SO này thú vị, nó xử lý chính xác tình huống của các tham số nguyên thủy trong hàm tạo, khi sử dụng DI thùng đựng hàng. Trong ví dụ đã cho, thiết kế có thể được cải thiện, điều này tránh hoàn toàn sự cần thiết của các kiểu nguyên thủy trong hàm tạo.


1

Những gì tôi làm là một mô hình nhà máy cho những trường hợp này.

Tôi không sử dụng chính đối tượng làm phụ thuộc mà tạo một đối tượng xuất xưởng bằng phương thức Get chấp nhận các tham số không thể bị ràng buộc tự động bởi container.

Ví dụ.:

 interface IDependencyObject {
       ....
 }

 class DependencyObject {

      public DependencyObject(int primitive, IAnotherDependency anotherDependency) {
      ...
      }

 }

 class DependencyObjectFactory {

      private readonly IAnotherDependency anotherDependency;

      public DependencyObjectFactory(IAnotherDependency anotherDependency) {
           this.anotherDependency = anotherDependency;
      }

      public IDependencyObject Get(int primitive) {
           return new DependencyObject(primitive, anotherDependency);
      }
 }

 interface IDependencyObjectFactory {
       IDependencyObject Get(int primitive);
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.