Ninject 当 Concrete 实现 Abstract 时绑定 AllClasses
Ninject Bind AllClasses when Concrete implements Abstract
我有(一个非常人为的例子):
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 正在处理抽象 class 接口,因此从技术上讲,有 2 个接口可以绑定到策略。
我有(一个非常人为的例子):
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 正在处理抽象 class 接口,因此从技术上讲,有 2 个接口可以绑定到策略。