首页 文章

当Concrete实现Abstract时,Ninject绑定AllClasses

提问于
浏览
0

我有(一个非常人为的例子):

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 回答

  • 0

    所以我稍微修改了绑定:

    kernel.Bind(x => x.FromThisAssembly().SelectAllClasses().InheritedFrom(typeof(IStrategy)).BindDefaultInterfaces());
    

    所以只是多元化是问题..

    我的想法是Ninject将抽象类视为接口,因此从技术上讲,策略可以绑定2个接口 .

相关问题