2011-04-19 11 views
5

Me pregunto ¿cómo se puede construir el constructor con ninject 2.0 cuando tiene un controlador base?¿Ninject con un controlador base?

tengo

 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; 
     } 

Sin embargo, me sale

'BaseController' no contiene un constructor que lleva 0 argumentos

+2

Yo también tuve este problema, pero me olía fatal obligar a todos mis controladores hijos a proporcionar la dependencia para el controlador base. Comencé con ese enfoque, luego lo refiné para que el controlador base buscara explícitamente una instancia del Kernel Ninject para resolver sus dependencias. – ctorx

Respuesta

13

que necesita inyectarse ambos servicios en su OtherController y llamar al constructor de base pasando el servicio que requiere:

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

disparar, soy demasiado lento. –

+0

hmm así que si tu heredaste tienes que hacerlo así? No se puede conseguir que vincule el nuevo objeto de forma similar a cómo funcionaría si no estuviera heredando? – chobo2

+3

@ chobo2 ignorando la inyección de dependencia, pero mirando a la herencia ... si una clase base requiere un servicio, es responsabilidad de la clase heredera proporcionarlo. De lo contrario, el tipo base no se puede inicializar correctamente. –

1

Tendría que encadenarse al controlador base, ¿no?

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