1

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

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

有什么建议么 ?

4

1 回答 1

2

如果我正确理解了您的问题,那么图书馆就是完成所有工作的入口点。在这种情况下,它取决于框架要做什么。以下是您可以做的一些事情,第一件事是首选:

  1. 检查库并找到一些方法来挂钩框架以拦截对象的创建。
  2. kernel.Inject(this)在库创建对象后调用。看看Ninject.Web扩展名。在那里我们添加了一些基类,例如NinjectWebPagefor WebPage。这个新的基类在创建后调用 kernel.Inject。现在可以从该基类派生新网页,并使用属性注入来获取依赖项。
  3. 使用ServiceLocator库创建的对象中的模式。但就在这个层面。任何更深的东西都应该使用依赖注入。
于 2013-03-16T22:47:35.190 回答