Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 你如何组织你的NInject模块?_Module_Ninject - Fatal编程技术网

Module 你如何组织你的NInject模块?

Module 你如何组织你的NInject模块?,module,ninject,Module,Ninject,NInject的模块架构似乎很有用,但我担心它会陷入一片混乱 你如何组织你的模块?您将它们放在哪个组件中,以及如何决定在哪个模块中进行哪些布线?每个子系统都有一个模块。当然,“子系统”的定义取决于 在某些情况下,由于较低级别的子系统/组件无法做出最终的权威决策,一些绑定的责任会被推到更高的级别上——在某些情况下,这可以通过将参数传递到模块中来实现。在使用NInject几年后回复我自己的帖子 以下是我如何组织我的模块,以书店为例: 书店解决方案 Domain.csproj 服务.csproj

NInject的模块架构似乎很有用,但我担心它会陷入一片混乱


你如何组织你的模块?您将它们放在哪个组件中,以及如何决定在哪个模块中进行哪些布线?

每个子系统都有一个模块。当然,“子系统”的定义取决于


在某些情况下,由于较低级别的子系统/组件无法做出最终的权威决策,一些绑定的责任会被推到更高的级别上——在某些情况下,这可以通过将参数传递到模块中来实现。

在使用NInject几年后回复我自己的帖子

以下是我如何组织我的模块,以书店为例:

  • 书店解决方案
    • Domain.csproj
    • 服务.csproj
      • CustomerServicesInjectionModule.cs
      • PaymentProcessingInjectionModule.cs
    • DataAccess.csproj
      • CustomerDatabaseInjectionModule.cs
      • BookDatabaseInjectionModule.cs
    • CustomSecurityFramework.csproj
      • CustomSecurityFrameworkInjectionModule.cs
    • PublicWebsite.csproj
      • PublicWebsiteInjectionModule.cs
    • Intranet.csproj
      • IntranetInjectionModule.cs
这意味着系统中的每个项目都预先打包了一个或多个NInject模块,这些模块知道如何为该项目的类设置绑定

大多数情况下,单个应用程序不希望对项目提供的默认注入模块进行重大更改。例如,如果我正在创建一个需要导入DataAccess项目的小WinForm应用程序,通常我还希望将项目的所有存储库类绑定到它们关联的IRepository接口


同时,没有任何东西强迫单个应用程序使用特定的注入模块。应用程序可以创建自己的注入模块,并忽略正在导入的项目提供的默认模块。这样,系统仍然保持灵活和解耦。

好问题。我希望看到更多关于这一点的讨论,因为我和你们一样担心。每个子系统有一个模块听起来很合理,但我也有一些模块,用于以不同方式连接单元测试的依赖项。因此…这意味着您必须在每个有模块的项目中包含一个Ninject包/引用???我更希望在调用程序集(例如web项目)中有一个地方注册我需要的每个服务,然后只有该程序集将直接引用Ninject。想法?是的,这是此设置的一个缺点。但是,除非你有一个非常纯粹的应用程序,它从不使用属性注入或使用Kernel.Get(),否则我通常会得到一个NInject引用。好吧……我刚刚完成了一个使用Unity for DI的项目,我在web项目的引导程序中得到了一个长RegisterServices方法。我的类libs项目中没有一个直接依赖于Unity或EntLib。他们都利用了注射。我觉得很好。是的,在绿地项目上工作很好,所以你可以把每件事都做好。不过有几个问题-如果需要创建使用域层、服务层等的Windows应用程序,您会怎么做?是否复制所有RegisterService方法?如果您有另一个仅应用于web项目的WebSecurity项目,并且不想将其导入Windows应用程序,该怎么办?您将如何组织此纯网络项目的服务注册?正是在这一点上,我们需要模块,我们需要把它们放在一个可以共享的地方。