2009-08-27 12 views
14

Considere:Constructor inyección de dependencias en un controlador de ASP.NET MVC

public class HomeController : Controller 
{ 
    private IDependency dependency; 

    public HomeController(IDependency dependency) 
    { 
     this.dependency = dependency; 
    } 
} 

Y el hecho de que los controladores en ASP.NET MVC deben tener un constructor por defecto vacío ¿hay alguna manera que no sea la definición de un vacío (e inútil en mi opinión) constructor para DI?

Respuesta

8

Si desea tener constructores sin parámetros, debe definir una fábrica de controladores personalizada. Phil Haack tiene un gran blog post sobre el tema.

Si no desea hacer rodar su propia fábrica de controladores, puede obtenerlos prefabricados en el proyecto ASP.NET MVC Contrib en codeplex/github.

7

Usted no tiene que tener el constructor vacío si configurar un ControllerFactory costumbre de usar un marco de inyección de dependencias como Ninject, AutoFac, Castle Windsor, y etc. La mayoría de estos tienen un código para CustomControllerFactory utilizar su contenedor en el que puede reutilizar

El problema es, la fábrica controlador por defecto no sabe cómo pasar la dependencia en Si no desea utilizar un marco mencionado anteriormente, se puede hacer lo que se llama la inyección de dependencias del hombre pobre:.

public class HomeController : Controller 
{ 

    private IDependency iDependency; 

    public HomeController() : this(new Dependency()) 
    { 
    } 

    public HomeController(IDependency iDependency) 
    { 
     this.iDependency = iDependency; 
    } 
} 
1

puede inyectarse la dependencia de la propiedad, por ejemplo, ver: Injection by Property Usando Ninject se parece a esto:

[Inject] 
public IDependency YourDependency { get; set; } 
Cuestiones relacionadas