如何从模块中加载Ninject内核中的所有实例?
Ninject提供分离的绑定模块和也是方便的方式GetAll<T>()
的方法IResolutionRoot
获得对于给定类型的所有实例。
我有多个模块注册多个实现相同类型的类,例如:
interface IFoo { }
class FooA : IFoo { } // in Module1
class FooB : IFoo { } // in Module2
class FooC : IFoo { } // in Module2
在已经加载Module1
的内核中加载Module2
后, FooC
通过请求IFoo
来检索FooC
的实例? 就像是:
StandardKernel kernel = new StandardKernel(new Module1()); // Module1 registered
Module2 module2 = new Module2();
kernel.Load(module2);
// kernel.GetAll<IFoo>().Where( ... from Module2 ... );
我唯一想到的是通过Module2
获取所有已注册的绑定。 但是,那么,如何检索实例?
var fooBindings = module2.Bindings.Where(b => b.Service.Equals(typeof(IFoo)));
// and then something like:
var instances = fooBindings.Select(b => kernel.Get(b));
// or kernel.Resolve(b) where b is instance of IBinding
// then: instances will contain only FooC, not the FooA and FooB.
我知道类似的问题已经在这里问过了:Ninject GetAll Where Module = foo但是不可能利用模块暴露的Bindings
成员来做这件事吗?
上一篇: How to get all instances from the module loaded in a Ninject kernel?