在类库中是否有针对依赖注入的解决方法?

时间:2016-07-08 07:49:10

标签: c# ninject

我有一个类库,在内部我已经构建了使用依赖注入(ninject)。它被各种项目使用; MVC,Windows服务,REST apis等。

我只是有一个类似的课程:

public class KittenInvestigator
{
   [Inject]
   public IKittenDetectorDevice KittenDetectorDevice { get; set; }

   ...
}
谷歌搜索到这个问题我已经发现在类库中初始化ninject是不可能的,因为没有' startup'方法或钩子。

我正在寻找解决方法。有很多关于这个问题的帖子,但我找不到任何解决方案或解决方法。有什么想法吗?

我考虑过的一些事情:

  • 将绑定放入引用库的项目中。这是非常糟糕的,因为注入在库内部使用,以便外部组件永远不会知道它 - 他们必须神奇地知道添加这些绑定或库不会工作。

  • 某种反射,使我在主项目中的ninject代码扫描ninject模块的所有程序集并初始化它们。

  • 类库中的静态初始化方法,必须由主项目调用,以设置ninject内容(看起来很俗气)。

  • 其他一些聪明的设计。

2 个答案:

答案 0 :(得分:1)

您可以使用启动方法,创建一个名为bootstrapper的静态类,并在静态构造函数中执行DI容器的组合。

答案 1 :(得分:0)

可以使用Fody.ModuleInit在加载程序集时自动引导库。但我不会推荐它,而是做以下任何一种:

  • 按照马克·西曼(Mark Seeman)所述的明确方式(Steven已经为您的帖子提供了一个评论链接:DI friendly library
  • 仔细权衡优缺点后,选择使用ninject模块并使用Dynamic Module Loading或类似的东西,但需要定制。
相关问题