我正在开发一个框架扩展,它使用 Ninject 作为 IoC 容器来处理动态注入,但我在尝试解决如何实现这一点时遇到了一些麻烦。
我的框架的期望是你会传入,IModule(s)
所以它可以很容易地在 MVC、WebForms 等中使用。所以我有这样的类结构:
public class NinjectFactory : IFactory, IDisposable {
readonly IKernel kernel;
public NinjectFactory(IModule[] modules) {
kernel = new StandardKernel(modules);
}
}
这很好,我可以在单元测试中创建一个实例并传递一个基本实现IModule
(使用InlineModule
似乎推荐用于测试的构建)。
问题是直到运行时我才知道我需要注入的类型,并且它们是通过我正在扩展的框架以如下方法请求的:
public IInterface Create(Type neededType) {
}
这就是我难过的地方,我不确定检查->创建(如果需要)->返回的最佳方法,到目前为止我有这个:
public IInterface Create(Type neededType) {
if(!kernel.Components.Has(neededType)) {
kernel.Components.Connect(neededType, new StandardBindingFactory());
}
}
这会将其添加到组件集合中,但我无法确定它是否创建了一个实例,或者我如何创建一个实例并为.ctor
.
我是否以正确的方式进行此操作,或者 Ninject 甚至不打算以这种方式使用?