5

Tôi tò mò muốn biết liệu có thể thay thế vùng chứa IoC tích hợp của Spring.Net với Ninject hay không. Chúng tôi sử dụng Ninject trên nhóm của mình cho IoC trong các dự án khác của chúng tôi vì vậy tôi muốn tiếp tục sử dụng vùng chứa đó nếu có thể.Thay thế Spring.Net IoC bằng một Container khác (ví dụ: Ninject)

Điều này có khả thi không? Có ai viết một Ninject-Spring.Net Adapter ??

Sửa

Tôi thích nhiều phần của gói Spring.Net (truy cập dữ liệu, giao dịch, vv) nhưng tôi không thực sự thích container dependency injection. Tôi muốn thay thế mà với Ninject

Cảm ơn

Trả lời

2

Jeffrey, bạn có thể vui lòng cung cấp ví dụ về những gì bạn đang cố gắng làm không? Tôi không thấy điểm của bạn, tại sao/ở đâu/làm thế nào bạn muốn kết hợp 2 container. Nếu mã của bạn hoàn toàn không khả dụng, thì bạn sẽ không gặp bất kỳ vấn đề nào khi sử dụng một trong hai thùng chứa để thực hiện việc đấu dây.

+0

Erich, tôi không muốn kết hợp cả hai, tôi muốn thay thế hoàn toàn thùng chứa Spring.Net bằng Ninject (Chúng tôi sử dụng nó trên các dự án khác và tôi thích API đơn giản, thông thạo). Câu hỏi phụ: Có phải Spring.Net được viết xung quanh thuộc tính hoặc hàm khởi tạo nói chung không? Một số lớp tôi đã xem xét trông giống như chúng được cấu hình với tiêm thích hợp. –

+0

Hãy để tôi làm rõ như tôi thấy nơi sự hiểu lầm đến từ đâu. Tôi thích, ví dụ, các trình bao bọc DAO và ADO.Net được sử dụng trong Spring.Net nhưng tôi muốn có thể cấu hình các thành phần đó mà không sử dụng vùng chứa được cung cấp như là một phần của Spring.Net. –

+1

Jeffrey, bạn hoàn toàn có thể sử dụng các thư viện khác của Spring.NET một cách riêng biệt khỏi thùng chứa IoC. Liên quan đến việc xây dựng-vs tài sản tiêm, Spring.NET cho phép bạn lựa chọn giữa hai cho mỗi đối tượng. Khi nói đến các đối tượng nối dây tự động, bạn thậm chí có thể định cấu hình vùng chứa Spring để tìm kiếm một hàm tạo và - nếu không tìm thấy hoặc có thể thỏa mãn - hãy thử tiêm thuộc tính thay thế. Về API thông thạo đơn giản, bạn có thể muốn kiểm tra dự án Spring.Config mới http://eeichinger.blogspot.com/2009/12/merry-xmlless-codeconfig-for-springnet.html của tôi. –

6

tôi không thể nói cụ thể về chuyển đổi Spring.NET để Ninject, nhưng nhìn chung, tất cả các mã ứng dụng nên được ghi vào được DI container-agnostic.

Cách tốt nhất để suy nghĩ về DI Containers là Hollywood Principle. Trong điều khoản DI, nó trở thành, không gọi DI Container, nó sẽ gọi cho bạn.

Nói cách khác, ứng dụng tốt nhất của DI là sử dụng các mẫu đơn giản như Tiêm xây dựngNhà máy trừu tượng.

Hầu hết DI Các thùng chứa có giá trị muối của chúng vốn đã hiểu được các mẫu này, vì vậy không cần đặc biệt, DI Container cụ thể, nhảy qua hoops.

Điều này cũng có nghĩa là lý tưởng, bạn chỉ nên có mã DI dành riêng cho vùng chứa trong một tệp trong ứng dụng của bạn. Nơi này được gọi là Thành phần gốc và đây là nơi DI Container nối lên toàn bộ biểu đồ đối tượng và tránh đường.

Nếu bạn làm theo nguyên tắc này, bạn có thể dễ dàng trao đổi một DI Container cho một nguyên tắc khác.

Các bài viết sau có thêm chi tiết:

+0

+1. Đồng ý - bạn chắc chắn muốn tránh đi qua các thùng chứa để sử dụng như một định vị dịch vụ. – TrueWill

+0

Tôi đồng ý với tuyên bố của bạn, tôi chỉ muốn biết nếu Spring.Net được phát triển theo cách như vậy. Tôi không có bất kỳ kinh nghiệm với nó và không muốn dành thời gian nhìn vào nó nếu tôi không thể sử dụng Ninject với nó –

2

Tôi có nghĩa là tất cả mọi thứ tôi đã nói trong câu trả lời khác của tôi. Tuy nhiên, tôi cũng nhận thấy rằng nếu bạn hiện tại hãy sử dụng Spring.NET làm Trình định vị dịch vụ (tức là bạn có mã được rải lên trên cơ sở mã truy vấn vùng chứa), câu trả lời đó có thể không hữu ích.

Nếu đúng như vậy, bạn có thể thấy dự án Common Service Locator hữu ích. Nó là một dự án mã nguồn mở cố gắng trừu tượng hóa các Định vị Dịch vụ cụ thể, ẩn tất cả chúng đằng sau một giao diện chung.

Mặc dù chúng dường như không có triển khai Ninject, chúng có triển khai Spring.NET, vì vậy có thể bạn có thể mất nửa chừng.

Đối với hồ sơ, tôi xem xét Service Locator một mô hình chống, và thấy rằng các dịch vụ Locator chung là câu trả lời sai cho vấn đề sai. Trong mắt tôi, nó hoàn toàn dư thừa, nhưng nó có thể hữu ích cho bạn như một bước trung gian.

+0

Hi Mark, tôi đánh giá cao câu trả lời rất chi tiết và thông tin của bạn nhưng tôi có cùng một bình luận như trước: Tất cả những gì tôi thực sự muốn biết là nếu ai đó đã sử dụng Ninject với Spring.Net và/hoặc trải nghiệm của họ là gì, họ đã kết nối nó như thế nào, v.v ...? –

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