如何从模块中加载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成员来做这件事吗?

链接地址: http://www.djcxy.com/p/66279.html

上一篇: How to get all instances from the module loaded in a Ninject kernel?

下一篇: Configuring Ninject to return a list of results