快速查看其他答案:看起来您所做的事情并没有如此不同,以至于 Ninject 存在根本性错误,您需要对其进行修改或替换。在许多情况下,您不能“直接使用 [the] internals”,因为它们依赖于未解决的依赖注入;因此首先使用了 Ninject。此外,听起来您已经拥有一组内部接口,这就是提出问题的原因。
想法:直接在你的 SDK 或库中使用 Ninject 的一个问题是你的用户将不得不在他们的代码中使用 Ninject。这对你来说可能不是问题,因为它是你的 IoC 选择,所以无论如何你都会使用它。如果他们想使用另一个 IoC 容器怎么办,那么现在他们实际上有两个正在运行的复制工作。更糟糕的是,如果他们想使用 Ninject v2 而您使用的是 v1.5,那么情况就会变得更加复杂。
最好的情况:如果您可以重构您的类,以便它们通过依赖注入获得所需的一切,那么这是最干净的,因为库代码不需要任何IoC 容器。该应用程序可以连接依赖项并且它只是流动。但这并不总是可能的,因为有时库类需要创建具有无法通过注入解决的依赖关系的实例。
建议:CommonServiceLocator(和它的 Ninject 适配器)是专门为这种情况设计的(具有依赖关系的库)。您针对 CommonServiceLocator 进行编码,然后应用程序指定哪个 DI/IoC 实际支持该接口。
现在您的应用程序中必须有 Ninject和CommonServiceLocator有点痛苦,但 CommonServiceLocator 非常轻量级。您的 SDK/库代码仅使用相当干净的 CommonServiceLocator。