我希望 Ninject 为实现泛型接口的特定程序集中的所有类型创建绑定,而无需在运行时全部指定它们。有点像 Autofac 中开放泛型的工作方式。
这就是我想出的...
kernel.Bind(x => x.FromThisAssembly()
.SelectAllClasses()
.Where(t => t.IsAssignableFrom(
typeof(ICommandHandler<>)))
.BindAllInterfaces());
调用下面的方法,我希望实现所有类型的数组,ICommandHandler<T>
但它没有产生任何结果......
public void Process<TCommand>(TCommand command)
where TCommand : ICommand
{
var handlers =
_kernel.GetAll<ICommandHandler<TCommand>>();
foreach(var handler in handlers)
{
handler.Handle(command);
}
}
有没有现有的方法来实现这一目标?还是我需要使用约定 API 自行开发?
这似乎是一种相当普遍的模式,并且想知道是否可以在不编写我自己的实现的情况下实现这一点。