Có một cuộc thảo luận diễn ra giữa các nhà bảo trì của các thư viện DI hiện có, có hay không xây dựng, duy trì và hỗ trợ bộ điều hợp cho hệ thống DI tích hợp sẵn mới của ASP.NET. Các nhà bảo trì Autofac có confirmed rằng họ sẽ tạo và hỗ trợ bộ điều hợp, trong khi nhóm Ninject là silent và các nhóm khác như nhóm Injector đơn giản (bao gồm tôi) have explained rằng họ sẽ không hỗ trợ bộ điều hợp.
Cá nhân, tôi nghĩ thư viện DI tích hợp sẵn trong ASP.NET Core là thư viện DI đẹp và sạch, nhưng nó chỉ giới hạn ở các ứng dụng đơn giản. Như tôi đã giải thích here, nhiều tính năng được yêu cầu để phát triển các ứng dụng bảo trì được xây dựng xung quanh các nguyên tắc SOLID không được hỗ trợ. Tuy nhiên, giống như thư viện Unity DI đã làm một vài năm trước đây, tôi nghĩ rằng container tích hợp này có thể thực sự kích hoạt các nhà phát triển bắt đầu sử dụng tiêm phụ thuộc, đó là một chiến thắng cho ngành công nghiệp của chúng tôi.
Những giới hạn này làm cho vùng chứa được tích hợp sẵn đặc biệt phù hợp với cấu hình và mở rộng hệ thống ASP.NET. Để xây dựng các ứng dụng có thể bảo trì lớn, bạn sẽ cần phải sử dụng một thư viện DI khác. Điều này tất nhiên là tốt; bạn sẽ phải chọn đúng công cụ cho công việc.
Thật không may, cho đến bây giờ, nhóm ASP.NET đã liên lạc publicly sử dụng thư viện DI khác, có nghĩa là bạn sẽ phải viết/sử dụng bộ điều hợp. Thật không may là IMO tin nhắn sai, vì hầu hết các thư viện DI không tương thích với API được trình bày bởi vùng chứa được tích hợp sẵn (như tôi đã giải thích chi tiết here và here chi tiết). Chỉ Autofac có vẻ hợp lý đồng bộ, điều này giải thích tại sao nhóm Autofac chọn duy trì bộ điều hợp. Nhưng lưu ý rằng ngay cả Autofac đã được chứng minh là không tương thích với trừu tượng mà Microsoft xác định, và họ (giống như StructureMap) đã phải làm cho big changes cho sản phẩm của họ thậm chí có thể tuân thủ với sự trừu tượng hóa. Và những người bảo trì Autofac là severely frustrated về toàn bộ quá trình và sự trừu tượng nói chung. Và như tôi đã giải thích here, ngay cả việc cung cấp bộ điều hợp ASP.NET được cung cấp của Ninject bị hỏng.
Thông báo này do nhóm ASP.NET sử dụng bộ điều hợp IMO là lỗi lớn, vì điều này ngăn cản sự đổi mới (trong khi thư viện DI không có; nó chỉ là thư viện DI khác). ASP.Đội ngũ NET đang quảng bá một mô hình nơi cả các thành phần ứng dụng của bạn và hệ thống ASP.NET (và tất cả các hệ thống phụ khác sẽ bổ sung trong tương lai) sẽ được đăng ký trong vùng chứa tùy chỉnh của bạn. Nó là hợp lý hơn và thiết thực để giữ cho cấu hình ứng dụng của bạn tách biệt với cấu hình của hệ thống ASP.NET (như được giải thích here).
Vì lý do này, tôi thấy việc sử dụng bộ điều hợp cho bất kỳ vật chứa nào thay vì vô ích. Như tôi đã chỉ ra here nó thực sự dễ dàng để cắm container DI của riêng bạn, trong khi vẫn giữ nó hoàn toàn tách biệt với đăng ký của ASP.NET. Điều này có nghĩa là bạn không cần hỗ trợ cho Ninject để có thể sử dụng Ninject hiệu quả trên một dự án ASP.NET Core. Điều duy nhất Ninject cần làm là tạo một phiên bản tương thích với .NET Core (trong trường hợp sản phẩm của bạn cần chạy trên nền tảng mới đó). Tóm lại, tôi không chắc chắn rằng hỗ trợ 'đang chết dần', mặc dù một số người bảo trì DI (như đội Injector đơn giản, và có thể cả Castle Windsor và Ninject) đã chọn không xây dựng, duy trì và hỗ trợ việc triển khai bộ điều hợp cho ASP.NET Core, bởi vì nó không cần thiết và chỉ có trong quá trình thực hiện.
CẬP NHẬT tháng 11 năm 2016
Tôi đã discussing some improvements để ASP.NET Core với Microsoft để làm cho nó dễ dàng hơn để cắm một bình chứa mà không có một bộ chuyển đổi (hãy nhìn vào example repository của tôi và đặc biệt là các Startup.cs of the Ninject sample project), nhưng cho đến bây giờ, Microsoft dường như không thể tiến triển được vì (như Fowler tự khẳng định) "bias towards conforming containers [là] tách rời tầm nhìn của họ".
Cảm ơn bài đăng sâu sắc, điều quan trọng bị thiếu trong vùng chứa DI được xây dựng là không có ánh xạ dựa trên quy ước. Tôi phải bao gồm mọi dự án duy nhất theo dự án khởi động của tôi và lập bản đồ các phụ thuộc. Điều này có vẻ như một sai lầm rất lớn, trừ khi tôi đang thiếu một cái gì đó. – Spets
@Spets Vùng chứa được xây dựng sẵn đặc biệt có nghĩa là một hệ thống cấu hình cho chính ASP.NET. Vì vậy, điều này có nghĩa rằng bạn có thể dễ dàng trao đổi các phần của ASP.NET và các thành phần bên thứ 3 có thể sử dụng cùng một mô hình cấu hình. Thùng chứa được tích hợp sẵn được xây dựng xung quanh mô hình đó và điều đó giải thích tại sao một số tính năng không được thực hiện. Lưu ý rằng đăng ký theo lô thực sự dễ dàng để tự viết lên trên cùng của vùng chứa và để trở thành thư viện DI hấp dẫn, các tính năng quan trọng khác cần được triển khai trước tiên. Nhưng một lần nữa, đừng lạm dụng hệ thống DI để đăng ký các loại của riêng bạn. – Steven
Gotcha có ý nghĩa. – Spets