Ninject là gì và bạn sử dụng nó khi nào?

Ninject là gì và bạn sử dụng nó khi nào?

ninject là một bộ tiêm phụ thuộc cho .net triển khai mẫu tiêm phụ thuộc (đảo ngược chế độ điều khiển).

Giả sử bạn có kho lưu trữ và bộ điều khiển hai lớp:

Bạn Đang Xem: Ninject là gì và bạn sử dụng nó khi nào?

class controller {private dbrepository _repository; //… một số phương thức sử dụng _repository} class dbrepository {//… đây là một số logic nghiệp vụ…}

Vì vậy, bây giờ bạn có hai câu hỏi:

  1. Bạn phải khởi tạo _repository để sử dụng nó. Bạn có một số lựa chọn:

    1. Theo cách thủ công, trong hàm tạo. Nhưng điều gì sẽ xảy ra nếu phương thức khởi tạo của dbrepository bị thay đổi? Bạn sẽ cần ghi đè lớp bộ điều khiển của mình vì mã mà nó phụ thuộc vào đã thay đổi. Nếu bạn chỉ có một bộ điều khiển thì không quá khó, nhưng nếu bạn có nhiều lớp phụ thuộc vào bạn, thì kho lưu trữ sẽ trở thành một vấn đề thực sự.
    2. Xem Thêm : Bar trong rap là gì

      Bạn có thể sử dụng dịch vụ hoặc công cụ định vị nhà máy. Nhưng bây giờ bạn phải dựa vào bộ định vị dịch vụ của mình. Bạn có một bộ định vị dịch vụ toàn cầu mà tất cả các mã phải sử dụng. Bạn sẽ thay đổi hành vi của bộ định vị dịch vụ như thế nào khi bạn cần sử dụng bộ định vị dịch vụ cho logic kích hoạt trong một phần của mã nhưng lại sử dụng nó trong một phần khác của mã? Chỉ có một cách – chuyển bộ định vị dịch vụ qua phương thức khởi tạo. Nhưng với ngày càng nhiều khóa học, bạn sẽ cần phải vượt qua nó ngày càng nhiều. Dù sao thì đó cũng là một ý kiến ​​hay, nhưng về lâu dài thì đó là một ý kiến ​​tồi.

      class controller {private dbrepository _repository; public controller () {_repository = sentayho.com.vn & lt; dbrepository & gt; ()} //… một số phương thức sử dụng _repository}

    3. Bạn có thể sử dụng tính năng tiêm phụ thuộc. Xem mã:

      class controller {private irepository _repository; public controller (kho irepository) {_repository = repository;}}

      Giờ đây, khi bạn cần một bộ điều khiển, bạn có thể viết: sendayho.com.vn (); hoặc sentayho.com.vn () ;. Bạn có thể chuyển đổi giữa các trình giải quyết phụ thuộc nếu cần. Nhìn? Thật đơn giản, không cần viết quá nhiều.

    4. Xem Thêm : Luận Phong Thủy Ý Ngĩa Sim Lộc Phát Đuôi 868 Từ Chuyên Gia

      Bạn không thể tạo các bài kiểm tra đơn vị cho nó. Bộ điều khiển của bạn phụ thuộc vào kho lưu trữ và nếu bạn muốn thử nghiệm một số phương pháp sử dụng kho lưu trữ, mã của bạn sẽ đi đến cơ sở dữ liệu và yêu cầu nó cung cấp dữ liệu. Rất chậm, rất chậm. Nếu kho lưu trữ mã của bạn thay đổi, bộ điều khiển kiểm tra đơn vị của bạn sẽ ngừng hoạt động. Trong trường hợp này, chỉ các bài kiểm tra tích hợp mới cảnh báo bạn về “sự cố”. Những gì bạn cần trong các bài kiểm tra đơn vị là cô lập các lớp của mình và chỉ kiểm tra một lớp (lý tưởng – chỉ một phương pháp) trong bài kiểm tra. Nếu mã kho lưu trữ của bạn không thành công, bạn nghĩ rằng mã bộ điều khiển của bạn bị lỗi – điều này thật tệ (ngay cả khi bạn kiểm tra kho lưu trữ và bộ điều khiển – cả hai đều không thành công và có thể bạn đang bắt đầu từ sai chỗ). Việc xác định vị trí thực sự của lỗi mất rất nhiều thời gian. Bạn cần biết rằng lớp a là tốt và lớp b là có vấn đề.

    5. Khi bạn muốn thay thế dbrepository bằng thứ gì đó khác trong tất cả các lớp của mình, bạn phải thực hiện rất nhiều việc.

    6. Bạn không thể dễ dàng kiểm soát vòng đời của kho lưu trữ. Các đối tượng của lớp này được tạo khi bộ điều khiển được khởi tạo và bị xóa khi bộ điều khiển bị xóa. Không có sự chia sẻ giữa các trường hợp khác nhau của lớp bộ điều khiển, cũng như giữa các lớp khác. Với ninject, bạn có thể chỉ cần viết:

      kernel.bind () .to () .insingletonscope ();

      Một tính năng đặc biệt của tiêm phụ thuộc – phát triển nhanh nhẹn! Bạn mô tả rằng bộ điều khiển của bạn sử dụng một kho lưu trữ với giao diện irepository. Bạn không cần phải viết kho lưu trữ, chỉ cần tạo một lớp kho lưu trữ bộ nhớ và phát triển bộ điều khiển trong khi những người khác phát triển kho lưu trữ. Sau khi kho lưu trữ hoạt động, bạn chỉ cần gắn lại kho lưu trữ mặc định trong trình giải quyết phụ thuộc, hiện là kho lưu trữ. Có nhiều bộ điều khiển không? Bây giờ tất cả họ sẽ sử dụng dbrepository. Tuyệt.

      Đọc thêm:

      1. Đảo ngược quyền kiểm soát (wiki)
      2. Ức chế phụ thuộc (Wiki)
      3. Đảo ngược Vật chứa Kiểm soát và Mẫu tiêm Phụ thuộc (martin fowler)

Nguồn: https://anhvufood.vn
Danh mục: Kinh Nghiệm

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *