2010-05-28 80 views
2

我开始使用依赖注入,并且在向基类中注入依赖时遇到了一些麻烦。将依赖注入到基类中

我有一个BaseController控制器,我的其他控制器继承。在这个基本控制器的内部,我做了一些检查,例如确定用户是否有正确的权限来查看当前页面,检查是否存在某些会话变量等。

我在此基础控制器内有一个依赖项我想用Ninject但是当我设置此我会为我的其他依赖我被编译器告知,注入:

错误1“MyProject.Controllers.BaseController” 不含一个构造 取0参数

这是有道理的,但我不知道如何注入这种依赖。我应该使用这种使用基本控制器的模式么,还是应该以更高效/正确的方式进行操作?

+0

你可以发布一些代码的BaseController构造函数吗? – 2010-05-28 12:42:57

+4

而不是解决这个问题,请考虑这些规则:1)喜欢继承的构成。 2)不要在构造函数中执行任何工作。以下两者将使您的生活更轻松。 – 2010-05-28 12:45:23

回答

11

您BaseController构造函数应该是这样的

BacseConctoller(Info info) 
{ 
    this.info = info 
} 

,那么对于所有的传承类 其构造

ChildController(Info info):base(info) 
{ 
} 

在这种情况下,你可以注入信息对象的基本控制器类

+1

Seemann先生!我最近读了[你的书](http://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/dp/1935182501):) – Bart 2015-05-08 19:23:37

1

马克是对的钱,

BaseClass(dependantObject object) 
{ 
Object = object; 
} 

所以要履行dependantObject因此,所有的子类可以访问基的行为,我们可以使用在子类中的注射和简单链中的基础构造,传递我们的“Ninjected”对象。

SubClass() : this(null) {} 

SubClass(dependantObject object) : base(object) 
    { 

    } 

快乐编码!