2011-04-19 111 views
5

我想知道当你有一个基础控制器时,你怎么做构造函数注入ninject 2.0?Ninject与基础控制器?

 private readonly IBaseService baseService; 

     public BaseController(IBaseService baseService) 
     { 
      this.baseService = baseService; 

     } 


Bind<IBaseService>().To<BaseService>(); 


public class OtherController : BaseController 
{ 
     private readonly IOtherService otherService; 

     public OtherController(IOtherService otherService, IBaseService baseService) 
     { 
      this.otherService = otherService; 
     } 

但我得到

'BaseController' 不包含 构造函数0参数

+2

我也有过这个问题,但是它让我感到很可怕,迫使我所有的孩子控制器都为基础控制器提供依赖。我开始使用这种方法,然后对其进行了细化,以便基本控制器明确获取Ninject内核的实例以解决它的依赖关系。 – ctorx 2012-01-20 21:11:37

回答

13

您需要这两种服务注入到你的OtherController并调用基础构造函数来传递它需要的服务:

public OtherController(IOtherService otherService, IBaseService baseService) 
    : base(baseService) { this.otherService = otherService; } 
+0

拍,我太慢了。 – 2011-04-19 18:27:58

+0

嗯所以如果你继承你必须这样做?你不能让它绑定新的对象,就好像它不是继承将会起作用一样。 – chobo2 2011-04-19 19:17:26

+3

@ chobo2忽略了依赖注入,但是看着继承......如果基类需要一个服务,那么继承类就有责任提供它。否则,基本类型无法正确初始化。 – 2011-04-19 19:20:12

1

您必须链接到基本控制器,不是吗?

public OtherController(IOtherService otherService, IBaseService baseService) : base(baseService)