2009-11-09 34 views
12

Kiến trúc mô-đun của NInject có vẻ hữu ích nhưng tôi lo lắng rằng nó sẽ gặp một chút lộn xộn.Làm thế nào để bạn tổ chức các mô-đun NInject của mình?

Bạn tổ chức mô-đun của mình như thế nào? Mà lắp ráp để bạn giữ chúng trong và làm thế nào để bạn quyết định những gì wirings đi trong đó mô-đun?

+0

Câu hỏi hay. Tôi muốn xem thêm thảo luận về điều này khi tôi chia sẻ mối quan tâm của bạn. Có một mô-đun cho mỗi hệ thống phụ có vẻ hợp lý, nhưng tôi cũng có các mô-đun để kết nối các phụ thuộc khác nhau đối với Kiểm thử Đơn vị. – JulianM

Trả lời

7

Mỗi hệ thống con nhận được một mô-đun. Tất nhiên, định nghĩa về việc phân loại nào là 'hệ thống phụ' phụ thuộc vào ...

Trong một số trường hợp, trách nhiệm đối với một số ràng buộc được đẩy lên cấp cao hơn như một hệ thống con/thành phần cấp thấp không ở vị trí đưa ra quyết định có thẩm quyền cuối cùng - trong một số trường hợp, điều này có thể đạt được bằng cách chuyển các tham số vào Mô-đun.

2

Trả lời bài đăng của riêng tôi sau một vài năm sử dụng NInject.

Sau đây là cách tôi tổ chức NInjectModules của tôi, sử dụng một cửa hàng sách là một ví dụ:

  • BookStoreSolution
    • Domain.csproj
    • Services.csproj
      • CustomerServicesInjectionModule.cs
      • PaymentProcessingInjectionModule.cs
    • DataAccess.csproj
      • CustomerDatabaseInjectionModule.cs
      • BookDatabaseInjectionModule.cs
    • CustomSecurityFramework.csproj
      • CustomSecurityFrameworkInjectionModule.cs
    • PublicWebsite.csproj
        012.
      • PublicWebsiteInjectionModule.cs
    • Intranet.csproj
      • IntranetInjectionModule.cs

Điều này được nói là từng dự án trong hệ thống đi kèm đóng gói sẵn với một hoặc nhiều Các mô đun NInject biết cách thiết lập các ràng buộc cho các lớp của dự án đó.

Hầu hết thời gian, một ứng dụng riêng lẻ sẽ không muốn thay đổi đáng kể các mô-đun tiêm mặc định do dự án cung cấp. Ví dụ, nếu tôi đang tạo một ứng dụng WinForm nhỏ cần nhập dự án DataAccess, thông thường tôi cũng sẽ muốn có tất cả các lớp Repository <> của dự án liên kết với các giao diện IRepository <> liên kết của chúng.

Đồng thời, không có gì buộc ứng dụng cá nhân sử dụng mô-đun phun cụ thể.Một ứng dụng có thể tạo mô-đun tiêm riêng của nó và bỏ qua các mô-đun mặc định được cung cấp bởi một dự án mà nó đang nhập. Bằng cách này, hệ thống vẫn linh hoạt và tách rời.

+0

Vậy ... điều này có nghĩa là bạn phải đưa gói/tham chiếu Ninject vào từng dự án có mô-đun ??? Tôi muốn có một nơi duy nhất trong hội nghị người gọi của tôi (ví dụ, dự án web), nơi tôi đăng ký mọi dịch vụ tôi cần, và sau đó chỉ có hội đồng đó sẽ có một tham chiếu trực tiếp đến Ninject. Suy nghĩ? –

+0

Có đó là một bất lợi với thiết lập này. Tuy nhiên, trừ khi bạn có một ứng dụng rất thuần túy mà không bao giờ sử dụng thuộc tính injection hoặc sử dụng Kernel.Get <>() thì tôi thường kết thúc với một tham chiếu NInject anyway. – cbp

+0

cũng ... tôi vừa hoàn thành một dự án sử dụng Unity cho DI, và tôi đã kết thúc bằng một phương thức RegisterServices dài trong bootstrapper của tôi trong dự án web. Không có dự án libs lớp nào của tôi có trực tiếp phụ thuộc vào Unity hoặc EntLib. Họ tất cả các đòn bẩy xây dựng đòn bẩy. Tôi nghĩ nó khá là đẹp. –

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