Ninject:注入一个也被注入另一个注入依赖项的依赖项?

时间:2017-07-31 20:57:56

标签: c# dependency-injection ninject

首先我要说的是,我没有很多关于如何实施的余地,所以请保持"你做错了#34;评论至少。感谢。

我有两个定义读写操作的类。让我们称之为IReaders和IWriters。它们都注入了一个基础"数据访问层"称为IQueryBuilder,它是一个由实体框架上下文支持的简单抽象。所有这些都在WebAPI实现中,因此通用的#34;无参数构造函数"异常。

所以,让我们说你有你的作家:

public class Writer : IWriter {
    private readonly IQueryBuilder _qb;
    public Writer(IQueryBuilder qb){
        _qb = qb;
    }
}

读者:

public class Reader: IReader {
    private readonly IQueryBuilder _qb
    public Reader(IQueryBuilder qb){
        _qb = qb;
    }
}

现在假设我想在Writer中使用Reader:

public class Writer : IWriter {
    private readonly IQueryBuilder _qb;
    private readonly IReader _r;
    public Writer(IQueryBuilder qb, IReader r){
        _qb = qb;
        _r = r;
    }
}

正如您所看到的,在这种情况下,IQuerybuilder会注入新的Writer和注入的Reader。实际的代码显然要复杂得多,但是在做这个ninject的时候很长一段时间就会抛出一个无参数的构造函数'异常。

所以我的问题有两个方面:1)有没有办法在不改变类的结构的情况下做到这一点,即范围等等? 2)这样做的适当方法是什么?

我猜你可以使用" WhenInjectedInto"扩展

1 个答案:

答案 0 :(得分:1)

parameterless constructor例外不是来自Ninject。永远。我猜您正在使用ASP.NET MVC或WebAPI。在这种情况下,AFAIR,只有在Ninject未正确配置为容器时才会发生此异常。 在SO上有很多关于此的问题。

第二,是的,Ninject提供了几种不同的范围机制,其中InRequestScope用于Web或WCF项目(给定正确的扩展名......)以及#34;构建自己的"与InScope。同样,在SO上已经有很多关于这个主题的问题。

鉴于你的问题缺乏细节,不可能给出准确的答案。