我正在开发一个框架扩展,使用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甚至不应该被这样使用?