2009-08-27 5 views
14

Considérez:Constructor injection de dépendances dans un contrôleur ASP.NET MVC

public class HomeController : Controller 
{ 
    private IDependency dependency; 

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

Et le fait que les contrôleurs dans ASP.NET MVC doivent avoir un constructeur par défaut vide est-il un moyen autre que la définition d'un vide (et inutile à mon avis) constructeur pour DI?

Répondre

8

Si vous voulez avoir des constructeurs sans paramètres, vous devez définir une fabrique de contrôleurs personnalisée. Phil Haack a un très bon blog post sur le sujet.

Si vous ne souhaitez pas faire rouler votre propre fabrique de contrôleurs, vous pouvez les obtenir dans le projet ASP.NET MVC Contrib sur codeplex/github.

7

Vous ne devez pas avoir le constructeur vide si vous configurez un ControllerFactory personnalisé d'utiliser un cadre d'injection de dépendance comme Ninject, AutoFac, Castle Windsor, etc La plupart d'entre eux ont un code pour un CustomControllerFactory d'utiliser leur conteneur que vous peut réutiliser.

Le problème est, l'usine de contrôleur par défaut ne sait pas comment passer la dépendance Si vous ne souhaitez pas utiliser un cadre mentionné ci-dessus, vous pouvez faire ce qu'on appelle l'injection de dépendance de l'homme pauvre.

public class HomeController : Controller 
{ 

    private IDependency iDependency; 

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

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

Vous pouvez injecter votre dépendance par la propriété par exemple voir: Injection by Property L'utilisation Ninject ressemble à ceci:

[Inject] 
public IDependency YourDependency { get; set; } 
Questions connexes