小编W3t*_*r3y的帖子

Ninject:注入两个相同类型的不同对象

如果我有一个类,它具有相同类型的双重依赖关系(需要两个不同的实例),如果实例之间的唯一区别是更深的依赖关系,那么让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)

c# ninject

8
推荐指数
1
解决办法
1968
查看次数

标签 统计

c# ×1

ninject ×1