【问题标题】:Injecting a dependency into a base class将依赖项注入基类
【发布时间】:2010-05-28 12:39:01
【问题描述】:

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

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

我在这个基本控制器中有一个依赖项,我想使用 Ninject 注入它,但是当我像其他依赖项一样设置它时,编译器告诉我:

错误 1 ​​'MyProject.Controllers.BaseController' 不包含构造函数 接受 0 个参数

这是有道理的,但我只是不确定如何注入这种依赖关系。我应该完全使用这种使用基本控制器的模式,还是应该以更有效/正确的方式这样做?

【问题讨论】:

  • 你能发布一些 BaseController 构造函数的代码吗?
  • 不要解决这个问题,考虑以下规则: 1) 优先组合而不是继承。 2) 不要在构造函数中执行任何工作。遵循这两者将使您的 DI 生活更轻松。

标签: asp.net-mvc-2 dependency-injection ninject ninject-2


【解决方案1】:

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

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

那么对于所有的继承类 他们的构造函数

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

在这种情况下,您可以将 Info 对象注入基本控制器类

【讨论】:

【解决方案2】:

马克在钱上是对的,

BaseClass(dependantObject object)
{
 Object = object;
}

为了实现dependantObject,所有子类都可以访问基本行为,我们可以在子类上使用注入并简单地链接基本构造函数,传入我们的“Ninjected”对象。

 SubClass() : this(null) {}

 SubClass(dependantObject object) : base(object)
  {

  }

编码愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2020-03-17
    • 1970-01-01
    相关资源
    最近更新 更多