在使用不使用IoC的库的应用程序中使用IoC

时间:2013-03-15 12:01:30

标签: c# inversion-of-control ninject console-application service-locator

我目前正在使用一个库(SuperWebSocket),它是一个websocket服务器库,它使用一个引导程序来知道从配置文件加载哪些实例。我为此实现了一个bootstrap类(但实例并未使用IoC加载)。此服务器的命令也从程序集反射中加载。我想将这个服务器与我使用IoC的DAL和服务层结合使用。 我的主要问题是我无法在IoC场景中找到将此控制台应用程序(服务器)与lib配合的方法,而无需最终使用ServiceLocator。

通常内核(Ninject)应该位于组合根(看起来是许多人的最佳实践..)在这种情况下是不可能的,或者至少我没有找到如此那就是我在这里的原因。命令也从程序集反射中加载。我可以实现一个CommandLoader但是这仍然是一个问题,因为它们都从相同的接口继承(Multibinding可能?)。我可以为每个人制作自定义界面,但我仍然找不到自动加载它们的方法。即使我找到了加载它们的方法,我仍然必须能够从不容易做的属性中获得服务。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,那么图书馆就是所有工作的切入点。在这种情况下,它取决于框架该做什么。这里有一些你可以做的事情,首先是首选的东西:

  1. 检查库并找到一些方法来挂钩框架以拦截对象的创建。
  2. 在库创建对象后调用kernel.Inject(this)。查看Ninject.Web扩展程序。那里我们添加了一些基类,例如NinjectWebPage WebPage。这个新的基类在创建后调用kernel.Inject。现在可以从该基类派生新的网页,并使用属性注入来获取依赖关系。
  3. 在libray创建的对象中使用ServiceLocator模式。但就在这个层面。更深层次的东西应该使用依赖注入。