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

本文关键字:IoC 应用程序 | 更新日期: 2023-09-27 18:03:59

我目前正在使用一个库(SuperWebSocket),这是一个websocket服务器库,它使用一个引导程序,知道从配置文件加载哪些实例。我已经为此实现了一个引导类(但是实例没有使用IoC加载)。此外,来自此服务器的命令是从程序集反射加载的。我希望将此服务器与使用IoC的DAL和服务层结合使用。我的主要问题是,我找不到一种方法来把这个控制台应用程序(服务器)和合作与库在一个IoC场景,而不必最终使用ServiceLocator。

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

有什么建议吗

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

如果我正确理解你的问题,那么库是所有工作的入口点。在这种情况下,这取决于框架要做什么。下面是一些你可以做的事情,最重要的是:

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