2009-08-27 16 views
14

Rozważmy:Konstruktor Dependency Injection w ASP.NET MVC Controller

public class HomeController : Controller 
{ 
    private IDependency dependency; 

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

i fakt, że kontrolery w ASP.NET MVC musi mieć jeden pusty konstruktor domyślny jest jakiś sposób inny niż definiowanie pusty (i bezużyteczny według mnie) konstruktora dla DI?

Odpowiedz

8

Jeśli chcesz mieć konstruktory bez parametrów, musisz zdefiniować fabrykę sterowników niestandardowych. Phil Haack ma świetny numer blog post na ten temat.

Jeśli nie chcesz przetaczać swojej fabryki kontrolerów, możesz pobrać je wcześniej w projekcie ASP.NET MVC Contrib w codeplex/github.

7

Nie trzeba mieć pusty konstruktor, jeśli konfiguracja zwyczaj ControllerFactory użyć ramy wtrysku zależność jak Ninject, AutoFac, Castle Windsor i itd. Większość z nich posiada kod dla CustomControllerFactory do korzystania z ich kontener, w którym można ponownie wykorzystać.

Problem polega na tym, fabryka domyślny kontroler nie wie jak przekazać zależność, jeśli nie chcesz używać ramy wspomniano powyżej, można zrobić to, co nazywa się biedaka wtrysk zależność:.

public class HomeController : Controller 
{ 

    private IDependency iDependency; 

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

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

można wstrzykiwać zależności od własności na przykład patrz: Injection by Property Korzystanie Ninject wygląda następująco:

[Inject] 
public IDependency YourDependency { get; set; } 
Powiązane problemy