当我从Ninject绑定获得IEnumerable <t>时,如何找到一个派生类实现

时间:2018-01-22 20:21:08

标签: c# .net ninject

我有一个基类,它将接口成员实现为抽象方法。有一些派生类会覆盖此抽象方法。我有Ninject DI,内核将给出一个T(IEnumerable<T>)数组。如何使用此IEnumerable<T>调用一个特定的派生类实现。

以下是一些示例代码

这是我的界面

 public interface ICreateBatch
 {
    int CreateBatch();
 }

这是我的基础接口实现

public abstract class CreateBatchBase:ICreateBatch
{
    public abstract int CreateBatch();
}

这是派生类实现之一

public class CreateDerived1Batch:CreateBatchBase
{
    public override int CreateBatch()
    {
        //Derived one implementation
    }
}

public class CreateDerived2Batch:CreateBatchBase
{
    public override int CreateBatch()
    {
        //Derived two implementation
    }
}

Ninject正在给我一个IEnumerable。我如何从CreateDerived1Batch专门调用CreateBatch()?

先谢谢。

2 个答案:

答案 0 :(得分:2)

我认为在这种情况下的正常方法是使用上下文绑定(请参阅https://github.com/ninject/Ninject/wiki/Contextual-Binding)。例如。如果你这样绑定你的界面:

kernel.Bind<ICreateBatch>().To<CreateDerived1Batch>().WhenInjectedInto(typeof(TypeDependingOn1);
kernel.Bind<ICreateBatch>().To<CreateDerived2Batch>().WhenInjectedInto(typeof(TypeDependingOn2);

ICreateBatch应分别注入TypeDependingOn1TypeDependingOn2

答案 1 :(得分:0)

您可以使用LINQ扩展方法OfType<T>仅过滤给定类型的项目:

collection.OfType<Derived>().Method();