我应该在哪里定义我的Ninject模块和工厂?

7

我在这个网站上读到了这些:

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

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

  • 我的库不使用NInject.dll。
  • 因此,我的NinjectModules必须在我的应用程序项目中定义。
  • 我的工厂(按照这个原则创建)也必须在我的应用程序项目中定义,而不是直接在库中定义。

这似乎很奇怪,特别是对于工厂。我有很多使用相同库的项目。所有这些项目都需要重新定义ninject模块和工厂吗?

你怎么看?


可能是[最佳位置的Fluent IOC配置(目前正在尝试Ninject)]的重复问题(https://dev59.com/GVbTa4cB1Zd3GeqP-Wrg) - Ruben Bartelink
2个回答

1

这在很大程度上取决于您的库的上下文,我的做法是:

  • 在主项目中的引导程序中初始化所有内容。虽然我有几个级别的引导程序,其中我配置不同的东西(主要是因为我在相同类型的项目中使用我的库,所以它们具有类似的配置)

  • 为了将其与Ioc框架分离,我使用ServiceLocator模式,您可以在工厂中使用它。


我读到使用ServiceLocator实际上是一种反模式。如果可能的话,我想避免使用它。或者对于工厂来说还可以吗? - Filimindji
1
我认为在服务内部使用它来获取依赖项而不是将它们注入构造函数或属性中时,这是一种反模式。在工厂中,您正在尝试抽象Ioc容器(以便您可以使用不同的容器)。 - Sebastian Piu

1

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

对于工厂,您可以在将来使用{{link1:Ninject.Extensions.Factory}},这样您就不必自己实现它们。


@Filimindji 请参考我在建议的重复问题中提供的Remo的这个答案 - Ruben Bartelink
我喜欢使用多个专用汇编来进行配置的想法。 - Filimindji
你如何使用 Ninject.Extensions.Factory? - Filimindji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接