我正在使用 .NET 4.5,Ninject 3 和约定 lib 的绑定,如下所示:
kernel.Bind(x => x
.FromAssembliesMatching("assembly.dll")
.SelectAllClasses().InheritedFrom(typeof(ICommandHandler<>))
.BindAllInterfaces());
这适用于:
public class MyCommandHandler : ICommandHandler<MyCommand>
但不绑定:
public class MyGenericCommandHandler<T> : ICommandHandler<MyGenericCommand<T>>
但是,如果我为泛型类的特定实现添加单独的绑定,则以前的绑定有效,例如:
kernel.Bind(typeof(ICommandHandler<MyGenericCommand<float>>))
.To(typeof(MyGenericCommandHandler<float>))
kernel.Bind(typeof(ICommandHandler<MyGenericCommand<int>>))
.To(typeof(MyGenericCommandHandler<int>))
但是添加每个单独的泛型类型违背了约定的目的,并且需要为每个可能的单独类型(例如 float、int、string 等)添加绑定......
您知道如何修改约定或添加另一个约定(甚至提供完全不同的解决方案)以支持我的命令的通用版本吗?即支持两级泛型。