如果我有一个类,它具有相同类型的双重依赖关系(需要两个不同的实例),如果实例之间的唯一区别是更深的依赖关系,那么让Ninject执行DI并保持两个图分开的最佳方法是什么?
示例对象图:
foo ? ClassA ? ClassB
bar ? ClassA ? ClassB
Run Code Online (Sandbox Code Playgroud)
类C的构造函数:
public class C
{
public C(ClassB foo, ClassB bar) { … }
}
Run Code Online (Sandbox Code Playgroud)
那么我如何确保ClassB实例化的是foo作为ClassB依赖性提供的foo,并且bar...... bar?
仅仅为了某些背景,我有一些需求更改,所以我需要用只读的只写存储库替换只写存储库(IAdd)
public class CompositeWriteRepository<T> : IAdd<T>
{
public CompositeWriteRepository(IAdd<T> foo, IAdd<T> bar, Func<T, bool> descriminator) { ... }
public Add(T entity)
{
if (descriminator(entity)) {
foo.Add(entity);
} else {
bar.Add(entity);
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过模拟,这很容易,我可以使用名称注入:
kernel.Bind<IAdd<EntityType>>().To<fooRepository>().Named("foo");
kernel.Bind<IAdd<EntityType>>().To<barRepository>().Named("bar");
kernel.Bind<IAdd<EntityType>>().To<CompositeWriterRepository<EntityType>>()
.WithConstructorArgument("foo", x …Run Code Online (Sandbox Code Playgroud)