我有创建这样的层次结构的类:
public interface IHandler<T, T2> {
}
public class BaseHandler : IHandler<T, T2> {
}
public class DerivedHandler : BaseHandler {
}
基本上,这个想法是功能可以堆叠(每个派生级别将附加更多功能)。
我正在尝试使用 Ninject Conventions Extensions 以一种很好的方式绑定它。我所拥有的是:
kernel.Bind(
x =>
x.FromAssemblyContaining(typeof(IHandler<,>))
.SelectAllClasses()
.EndingWith("Handler")
.BindAllInterfaces());
当我请求DerivedHandler
. Ninject 一点也不抱怨。但是,当我请求 a 时BaseHandler
,我会看到:
有多个匹配的绑定可用。
显然,约定扩展正在考虑继承。当我请求BaseHandler
.. 它应该给我 aBaseHandler
还是 a DerivedHandler
?(我想要BaseHandler
..)。
有没有办法避免这种情况?我尝试了各种流利语法的组合,我可以得到“多个绑定”错误..或“未找到绑定”错误。
请注意,如果我手动绑定每个,这将非常有效。我认为这证明 Ninject 处理这个没有问题。它只是约定。