我有(一个非常人为的例子):
interface IStrategy
{
bool CanHandle(SomeEnum someEnum);
void Handle(SomeEntity someEntity);
void ConfigureDb(DbContext context);
}
abstract BaseStrategy : IStrategy
{
abstract bool CanHandle(SomeEnum someEnum);
abstract void Handle(SomeEntity someEntity);
virtual void Configure(DbContext context)
{
context.LazyLoading = true;
}
}
class SomeEntityStrategy : BaseStrategy
{
/* Assume this has been implemented */
}
class SomeOtherEntityStrategy : BaseStrategy
{
/* Assume this has been implemented */
}
所以我认为:
kernel.Bind(x => x.FromThisAssembly().SelectAllClasses().InheritedFrom(typeof(IStrategy)).BindDefaultInterface());
将所有具体实现绑定到接口 IStrategy
.
在我的构造函数中,我做:
ctor(IEnumerable<IStrategy> strategies)
这回来了一个空列表 .
所以这可能已经在其他地方得到了回答,但我并不完全确定我应该在搜索什么 .
编辑
所以出于某种原因,我不介意澄清为什么 BindAllInterfaces
工作???
所以我的想法是Ninject将抽象类视为接口 .
1 回答
所以我稍微修改了绑定:
所以只是多元化是问题..
我的想法是Ninject将抽象类视为接口,因此从技术上讲,策略可以绑定2个接口 .