当我从 Ninject 绑定中获得 IEnumerable<T> 时,如何找到派生的 class 实现
How can i find one derived class implementation when i have IEnumerable<T> from Ninject binding
我有一个基 class 将接口成员实现为抽象方法。有一些派生的 classes 覆盖了这个抽象方法。我有 Ninject DI,内核将给出一个 T(IEnumerable<T>)
的数组。我如何使用此 IEnumerable<T>
.
调用一个特定的派生 class 实现
这是一些示例代码
这是我的界面
public interface ICreateBatch
{
int CreateBatch();
}
这是我的基础 class 接口实现
public abstract class CreateBatchBase:ICreateBatch
{
public abstract int CreateBatch();
}
这是派生的 class 实现之一
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()?
提前致谢。
您可以使用 LINQ 扩展方法 OfType<T>
仅过滤给定类型的项目:
collection.OfType<Derived>().Method();
我认为这种情况下的正常方法是使用上下文绑定(参见 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
我有一个基 class 将接口成员实现为抽象方法。有一些派生的 classes 覆盖了这个抽象方法。我有 Ninject DI,内核将给出一个 T(IEnumerable<T>)
的数组。我如何使用此 IEnumerable<T>
.
这是一些示例代码
这是我的界面
public interface ICreateBatch
{
int CreateBatch();
}
这是我的基础 class 接口实现
public abstract class CreateBatchBase:ICreateBatch
{
public abstract int CreateBatch();
}
这是派生的 class 实现之一
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()?
提前致谢。
您可以使用 LINQ 扩展方法 OfType<T>
仅过滤给定类型的项目:
collection.OfType<Derived>().Method();
我认为这种情况下的正常方法是使用上下文绑定(参见 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