当Concrete实现Abstract时,Ninject绑定所有类
本文关键字:绑定 Ninject Concrete 实现 Abstract | 更新日期: 2023-09-27 18:29:33
我有(一个非常做作的例子):
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将抽象类视为接口。
所以我稍微更改了绑定:
kernel.Bind(x => x.FromThisAssembly().SelectAllClasses().InheritedFrom(typeof(IStrategy)).BindDefaultInterfaces());
因此,多元化才是问题所在。。
我的想法是,Ninject将抽象类视为一个接口,因此从技术上讲,该策略可以绑定到2个接口。