我应该在哪里定义我的NinjectModule和我的工厂?

时间:2011-12-15 09:44:31

标签: c# dependency-injection ninject

我在本网站上阅读了一些内容:

  • 最好在启动应用程序时配置我们的容器
  • 最好避免使我们的库依赖于依赖注入框架
  • 建议使用工厂初始化其属性在运行时定义的对象

我使用Ninject。如果我理解这些建议,就必须:

  • 我的库不使用NInject.dll
  • 因此,我的NinjectModules必须在我的应用程序的项目中定义
  • 我的工厂(which are created on this principle)也必须在我的应用程序的项目中定义,而不是直接在库中定义

这看起来很奇怪,特别是对于工厂来说。我有很多项目使用相同的库。所有这些项目是否应该重新定义ninject模块和工厂?

您怎么看?

2 个答案:

答案 0 :(得分:1)

这很大程度上取决于您的库的上下文,我是如何做到的:

  • 初始化主项目中Bootstrapper中的所有内容。虽然我有几个级别的bootstrappers,我配置不同的东西(主要是因为我在同一类项目中使用我的库,所以他们有相似的配置)

  • 为了保持从Ioc框架中抽象出来,我使用了您可以在工厂中使用的ServiceLocator pattern

答案 1 :(得分:1)

配置不一定在应用程序集中。它也可以在几个专用组件中,不包含任何配置的一部分。但正如您所提到的,它不应该是实现的一部分。如果您在多个项目中共享完全相同的配置,则可以引用现有项目。

对于工厂,您可以在将来使用Ninject.Extensions.Factory,这样您就不必自己实施。