当我有来自<T> Ninject 绑定的 IEnumerable 时,如何找到一个派生类实现



我有一个基类,它将接口成员实现为抽象方法。有一些派生类可以重写此抽象方法。我有 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((?

提前谢谢。

我认为在这种情况下的正常方法是使用上下文绑定(见 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中。

可以使用

LINQ 扩展方法OfType<T>仅筛选给定类型的项:

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

相关内容

最新更新