2011-12-24 20 views
7

Tengo clases como AccountsController, ProductsController, etc. que todas heredan de BaseController. Unity configura mis servicios según sea necesario. Estas clases también requieren un servicio _sequence. Como es un requisito común para todas las clases, me gustaría codificar esto en el BaseController.Llamando super constructor en C#

public class AccountsController : BaseController 
{ 
    public AccountsController(
     IService<Account> accountService) { 
     _account = accountService; 
    } 

public class ProductsController : BaseController 
{ 
    public ProductsController(
     IService<Account> productService) { 
     _product = productService; 
    } 


public class BaseController : Controller 
{ 
    public IService<Account> _account; 
    public IService<Product> _product; 
    protected ISequenceService _sequence; 

    public BaseController(
     ISequenceService sequenceService) { 
     _sequence = sequenceService; 
    } 

¿Pero cómo puedo hacer esto? ¿Debo configurar una llamada al Controlador Base dentro de los constructores de cada uno de los Controladores de Cuenta y Controlador de Productos?

Respuesta

12

Usted puede encadenar constructors:

public class ProductsController : BaseController 
{ 
    public ProductsController(
     IService<Account> productService) : base(productService) 
    { 
     _product = productService; 
    } 
} 

Tenga en cuenta que la BaseController encadenado (usando la palabra clave base) se ha pasado el parámetro productService, duro esto puede ser cualquier cosa.

Actualización:

Usted podría hacer lo siguiente (inyección de dependencias pobres Mans'):

public class ProductsController : BaseController 
{ 
    public ProductsController(
     IService<Account> productService) : base(new SequenceService()) 
    { 
     _product = productService; 
    } 
} 

O pasar en la dependencia de ISequenceService a través de los tipos que heredan:

public class ProductsController : BaseController 
{ 
    public ProductsController(
     IService<Account> productService, ISequenceService sequenceService) 
     : base(sequenceService) 
    { 
     _product = productService; 
    } 
} 
+0

Lo siento. No entiendo tu ejemplo. Lo que necesito es construir el BaseConstructor y el sequenceService. –

+0

@ Samantha2 - Respuesta actualizada con opciones. – Oded

+0

Vi tus comentarios sobre DI, pero ya estoy usando Unity para la inyección de dependencias. ¿No puedo hacer esto con Unity? Me pregunto cómo funciona Unity porque ya configura mi AccountController y alimenta instancias en él. ¿Qué pasa si solo hago una llamada al BaseController? ¿Unity no captará esto y configurará el SequenceService automáticamente? –

Cuestiones relacionadas