首先我要说的是,我没有很多关于如何实施的余地,所以请保持"你做错了#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"扩展
答案 0 :(得分:1)
parameterless constructor
例外不是来自Ninject。永远。我猜您正在使用ASP.NET MVC或WebAPI。在这种情况下,AFAIR,只有在Ninject未正确配置为容器时才会发生此异常。
在SO上有很多关于此的问题。
第二,是的,Ninject提供了几种不同的范围机制,其中InRequestScope
用于Web或WCF项目(给定正确的扩展名......)以及#34;构建自己的"与InScope
。同样,在SO上已经有很多关于这个主题的问题。
鉴于你的问题缺乏细节,不可能给出准确的答案。