Injeção de Construtor de dependência em um controlador de MVC ASP.NET

votos
14

Considerar:

public class HomeController : Controller 
{
    private IDependency dependency;

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

E o fato de que os controladores em ASP.NET MVC deve ter um construtor padrão vazio existe alguma maneira diferente de definir um construtor vazio (e inútil na minha opinião) para DI?

Publicado 27/08/2009 em 01:21
fonte usuário
Em outras línguas...                            


4 respostas

votos
8

Se você quer ter construtores sem parâmetros você tem que definir uma fábrica de controlador personalizado. Phil Haack tem um grande post sobre o assunto.

Se você não desejar construir sua própria fábrica de controlador que você pode obtê-los pré-fabricados na ASP.NET MVC Contrib projeto no CodePlex / github.

Respondeu 27/08/2009 em 01:29
fonte usuário

votos
7

Você não tem que ter o construtor vazio se você configurar um costume ControllerFactory usar um quadro de injeção de dependência como Ninject , Autofac , Castelo de Windsor , e etc. A maioria destes tem código para um CustomControllerFactory usar seu recipiente que você pode reutilizar.

O problema é, a fábrica controlador de padrão não sabe como passar a dependência em Se você não quiser usar um quadro mencionado acima, você pode fazer o que é chamado de injeção de dependência do homem pobre.:

public class HomeController : Controller
{

    private IDependency iDependency;

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

    public HomeController(IDependency iDependency)
    {
        this.iDependency = iDependency;
    }
}
Respondeu 27/08/2009 em 01:32
fonte usuário

votos
1

Você pode injetar sua dependência por propriedade por exemplo, ver: Injeção de propriedade Usando Ninject parece com isso:

[Inject]
public IDependency YourDependency { get; set; }
Respondeu 02/04/2010 em 15:34
fonte usuário

votos
1

Dê uma olhada em MVCContrib http://mvccontrib.github.com/MvcContrib/ . Eles têm fábricas controlador para um número de recipientes DI. Mapa Estrutura Windsor, etc.

Respondeu 27/08/2009 em 01:27
fonte usuário

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