我有一个类,它有我用 Ninject 连接的依赖项。
public interface IFoo {}
public class MyObject {
[Inject]
IFoo myfoo;
}
在实际实现中,我使用属性注入,但为了快速说明,我将在现场注入。据我了解,为了正确注入依赖项,我需要使用而不是新的 MyObject 实例
kernel.Get<MyObject>()
然而,我遇到的事情是 MyObject 只会在类库的上下文中使用。目的是让最终应用程序创建自己的模块并将其传递给内核实例以进行水合。鉴于此,将 Ninject 内核的通用实例呈现到我的类库以便 MyObject (和其他类似情况)的实例可以被水合的最实用的方法是什么?
我的第一个倾向是某种将单例内核内部化的工厂——应用程序本身必须通过加载模块来对其进行水合/初始化。
所以在 RandomService.cs
var myKernel = NinjaFactory.Unleash();
var myobj = myKernel.Get<MyObject>();
myobj.foo();
不过,在我沿着这条路走得太远之前,我需要进行一次健全性检查,以确保我的想法是合理的,或者没有其他明显的东西我遗漏了。我显然是 IoC 的新手,我觉得我掌握了基础知识,但不一定是最好的现实世界使用它的方法。