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

voix
14

Considérer:

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 constructeur vide (et inutile à mon avis) pour DI?

Créé 27/08/2009 à 01:21
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
8

Si vous voulez avoir des constructeurs vous devez sans paramètre définir une usine de contrôleur personnalisé. Phil Haack a un grand billet de blog sur le sujet.

Si vous ne voulez pas rouler votre propre usine de contrôleur que vous pouvez les obtenir pré-fait dans le ASP.NET MVC Contrib projet à CodePlex / GitHub.

Créé 27/08/2009 à 01:29
source utilisateur

voix
7

Vous ne devez pas avoir le constructeur vide si vous configurez une coutume ControllerFactory d'utiliser un cadre d'injection de dépendance comme Ninject , AutoFac , le château de Windsor , etc La plupart d' entre eux ont un code pour un CustomControllerFactory d'utiliser leur conteneur que vous pouvez 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 que l'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;
    }
}
Créé 27/08/2009 à 01:32
source utilisateur

voix
1

Vous pouvez injecter votre dépendance par la propriété voir par exemple: injection par la propriété Utiliser Ninject ressemble à ceci:

[Inject]
public IDependency YourDependency { get; set; }
Créé 02/04/2010 à 15:34
source utilisateur

voix
1

Jetez un oeil à MvcContrib http://mvccontrib.github.com/MvcContrib/ . Ils ont des usines de contrôleur pour un certain nombre de conteneurs DI. Windsor, carte de structure , etc.

Créé 27/08/2009 à 01:27
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more