Chúng tôi đang sử dụng ASP.net MVC.
Cái nào trong số này là bộ khung DI tốt nhất Ninject hoặc Unity và tại sao?
Chúng tôi đang sử dụng ASP.net MVC.
Cái nào trong số này là bộ khung DI tốt nhất Ninject hoặc Unity và tại sao?
Câu trả lời:
Lần trước khi xem xét một trong số chúng, tôi thấy Ninject tốt hơn một chút. Nhưng cả hai đều có mặt hạn chế của họ.
Ninject có một sơ đồ cấu hình thông thạo hơn. Sự thống nhất dường như chủ yếu dựa vào cấu hình XML. Hạn chế chính của Ninject là nó yêu cầu bạn tham chiếu Ninject.Core ở khắp mọi nơi trong mã của bạn để thêm thuộc tính [Inject].
Nếu tôi có thể hỏi, tại sao bạn lại giới hạn lựa chọn của mình cho hai điều này? Tôi nghĩ Castle.Windsor, Autofac và StructureMap ít nhất là tốt hoặc tốt hơn.
Tôi biết đây là một câu hỏi cũ, nhưng đây là suy nghĩ của tôi:
Cá nhân tôi thích Ninject. Tôi thích các giao diện thông thạo và tránh sử dụng XML. Tôi thường thích XML, chỉ không dành cho loại công cụ cấu hình này. Đặc biệt khi có sự tham gia của việc tái cấu trúc, các giao diện thông thạo sẽ giúp bạn dễ dàng sửa hơn.
Tôi bỏ lỡ ObjectFactory của StructureMap, nhưng có nhiều cách giải quyết dễ dàng để thêm nó vào Ninject.
Như Jeffery đã chỉ ra rằng bạn không cần phải sử dụng thuộc tính [Inject] khi bạn chỉ có một hàm tạo.
Tôi nhận thấy rằng tôi thích các giao diện thông thạo không chỉ vì chúng tránh được XML mà còn vì chúng gây ra lỗi thời gian biên dịch khi tôi thay đổi thứ gì đó ảnh hưởng đến chúng. Cấu hình XML không và tôi càng ít phải nhớ thay đổi thì càng tốt.
Tôi đồng ý với Mendelt, không có khung DI "tốt nhất". Nó chỉ phụ thuộc vào tình huống và tất cả chúng đều có ưu và khuyết điểm. David Hayden nói trên DotNet Rocks rằng Unity là lựa chọn ưu tiên nếu bạn sử dụng phần còn lại của EntLib và đã quen với điều đó. Cá nhân tôi sử dụng Unity vì khách hàng của tôi thích thực tế là nó cho biết Thư viện Doanh nghiệp của Microsoft (Unity) trên các tệp DLL, nếu bạn hiểu những gì tôi đang nói.
Tôi sử dụng cả cấu hình xml để thiết lập giao diện và triển khai cụ thể của chúng nhưng sau đó tôi sử dụng các thuộc tính trong mã khi chèn, như:
<type type="ILogger" mapTo="EntLibLogger">
<lifetime type="singleton"/>
</type>
và trong mã:
[InjectionConstructor]
public Repository([Dependency] ILogger logger)
Cá nhân tôi nghĩ rằng điều đó làm cho nó rõ ràng hơn những gì sẽ xảy ra, nhưng tất nhiên người ta có thể tranh luận rằng bạn sẽ có tham chiếu đến sự thống nhất trên toàn bộ ứng dụng của mình. Tuỳ bạn.
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
Unity nhanh hơn nhưng nó không phải là tốt nhất