2016-07-19 25 views
9

Tôi đang cố gắng chuyển một ứng dụng asp.net sang lõi asp.net. Tôi có tiêm tài sản (sử dụng ninject) trên thực hiện UnitOfWork của tôi như thế này.Tiêm tài sản trong Asp.Net Core

[Inject] 
public IOrderRepository OrderRepository { get; set; } 
[Inject] 
public ICustomerRepository CustomerRepository { get; set; } 

Có cách nào để đạt được cùng chức năng bằng cách xây dựng trong DI trên lõi .net không? Cũng có thể sử dụng ràng buộc dựa trên quy ước không?

+0

Related: https://stackoverflow.com/questions/39849142/when-to-use-property-injection – Steven

Trả lời

10

Không, hộp chứa DI/IoC tích hợp được cố ý giữ đơn giản trong cả cách sử dụng và các tính năng để cung cấp cơ sở cho các vùng chứa DI khác cho trình cắm thêm.

Vì vậy, không có hỗ trợ tích hợp cho: Tự động khám phá, Tự động đăng ký, Trang trí hoặc Injector hoặc đăng ký dựa trên quy ước. Cũng không có kế hoạch để thêm này vào container được xây dựng trong chưa xa như tôi biết.

Bạn sẽ phải sử dụng vùng chứa của bên thứ ba có hỗ trợ phun thuộc tính. Xin lưu ý rằng tiêm tài sản được coi là xấu trong 98% của tất cả các kịch bản, bởi vì nó ẩn phụ thuộc và không có đảm bảo rằng đối tượng sẽ được tiêm khi lớp được tạo ra.

Với hàm tạo hàm tạo, bạn có thể thực thi điều này thông qua hàm tạo và kiểm tra null và không tạo ra cá thể của lớp. Với việc tiêm thuộc tính, điều này là không thể và trong khi kiểm tra đơn vị nó không rõ ràng các dịch vụ/phụ thuộc nào mà lớp đòi hỏi khi chúng không được định nghĩa trong hàm khởi tạo, do đó dễ bỏ sót và nhận được NullReferenceExceptions.

Lý do hợp lệ duy nhất cho Tiêm tài sản mà tôi từng tìm thấy là tiêm dịch vụ vào các lớp proxy được tạo bởi thư viện của bên thứ ba, tức là các proxy WCF được tạo từ giao diện mà bạn không có quyền kiểm soát việc tạo đối tượng.

Tránh nó ở mọi nơi khác.

Các vấn đề liên quan