我正在使用 NInject 构建一个消息代理,我需要在容器中找到所有实现 Consumes 的实例,这是一个将类标记为能够使用特定消息类型的接口。
是否支持此场景?
我正在使用 NInject 构建一个消息代理,我需要在容器中找到所有实现 Consumes 的实例,这是一个将类标记为能够使用特定消息类型的接口。
是否支持此场景?
内特的回答:
多分辨率(via
GetAll
)目前不是多态的。这意味着它只会考虑来自您指定的确切接口的绑定。如果你这样做:kernel.Bind<IWorker>().To<WorkerA>(); kernel.Bind<IWorker>().To<WorkerB>(); kernel.Bind<IWorker>().To<WorkerC>();
接着:
kernel.GetAll<IWorker>();
它将返回 3 个项目。但是,即使
IWorkerA
,IWorkerB
和IWorkerC
implement ,当您请求 时IWorker
,Ninject 也不会查看IWorkerA
to的绑定。WorkerA
IWorker
看 :
http://groups.google.com/group/ninject/browse_thread/thread/7b6afa06099bc97a#
如果您没有Romain 的答案引用的线程中讨论的多态情况,那么只要您使用 Ninject 2,您就不应该有任何问题。Ninject 1.x 不包括这种支持。