我有一个基类,它将接口成员实现为抽象方法。有一些派生类会覆盖此抽象方法。我有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()?
先谢谢。
答案 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
应分别注入TypeDependingOn1
和TypeDependingOn2
。
答案 1 :(得分:0)
您可以使用LINQ扩展方法OfType<T>
仅过滤给定类型的项目:
collection.OfType<Derived>().Method();