Konstruktér Závislost injekce v MVC Controller ASP.NET

hlasů
14

Zvážit:

public class HomeController : Controller 
{
    private IDependency dependency;

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

A skutečnost, že řadiče v ASP.NET MVC, musí mít jednu prázdnou výchozí konstruktor je nějaký způsob, jiný než definující prázdný (a zbytečné podle mého názoru) konstruktor DI?

Položena 27/08/2009 v 01:21
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
8

Chcete-li mít bezparametrického konstruktérů musíte definovat továrnu vlastní ovladače. Phil Haack má velký příspěvek na blogu o toto téma.

Pokud si nechcete vytvořit vlastní továrnu řadič můžete si je předem vyrobený v ASP.NET MVC Contrib projektu na CodePlex / github.

Odpovězeno 27/08/2009 v 01:29
zdroj uživatelem

hlasů
7

Nemusíte mít prázdný konstruktor, pokud nastavit vlastní ControllerFactory používat injekční závislost rámec jako Ninject , AutoFac , hradu Windsor , a aj Většina z nich má kód pro CustomControllerFactory používat svůj kontejner, který můžete znovu použít.

Problém je, tovární výchozí řadič neví, jak předat závislost v Pokud nechcete používat rámec výše uvedeného, ​​můžete dělat to, co se nazývá injekce závislost chudáka.:

public class HomeController : Controller
{

    private IDependency iDependency;

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

    public HomeController(IDependency iDependency)
    {
        this.iDependency = iDependency;
    }
}
Odpovězeno 27/08/2009 v 01:32
zdroj uživatelem

hlasů
1

Můžete aplikovat svou závislost majetkem například viz: Injekce by majetku Použití Ninject vypadá takto:

[Inject]
public IDependency YourDependency { get; set; }
Odpovězeno 02/04/2010 v 15:34
zdroj uživatelem

hlasů
1

Podívejte se na MVCContrib http://mvccontrib.github.com/MvcContrib/ . Mají továrny řadiče pro řadu DI kontejnerů. Windsor, Structure mapa atd.

Odpovězeno 27/08/2009 v 01:27
zdroj uživatelem

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