2009-08-27 36 views
14

xem xét:Constructor Dependency Injection trong một điều khiển ASP.NET MVC

public class HomeController : Controller 
{ 
    private IDependency dependency; 

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

Và thực tế là điều khiển trong ASP.NET MVC phải có một constructor mặc định rỗng là có cách nào khác ngoài việc xác định một sản phẩm nào (và vô dụng theo ý kiến ​​của tôi) constructor cho DI?

Trả lời

8

Nếu bạn muốn có các nhà xây dựng không có tham số, bạn phải xác định một nhà máy điều khiển tùy chỉnh. Phil Haack có số lượng lớn blog post về chủ đề này.

Nếu bạn không muốn cuộn nhà máy điều khiển của riêng mình, bạn có thể đặt trước chúng trong dự án ASP.NET MVC Contrib tại codeplex/github.

7

Bạn không cần phải có các nhà xây dựng có sản phẩm nào nếu bạn thiết lập một ControllerFactory tùy chỉnh để sử dụng một khuôn khổ dependency injection như Ninject, AutoFac, Castle Windsor, và vv Hầu hết trong số này có mã cho một CustomControllerFactory sử dụng container của họ mà bạn có thể tái sử dụng.

Vấn đề là, các nhà máy điều khiển mặc định không biết làm thế nào để vượt qua sự phụ thuộc vào Nếu bạn không muốn sử dụng một khuôn khổ đề cập ở trên, bạn có thể làm những gì được gọi là dependency injection nghèo của con người:.

public class HomeController : Controller 
{ 

    private IDependency iDependency; 

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

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

bạn có thể tiêm phụ thuộc của bạn bằng cách sở hữu ví dụ xem: Injection by Property Sử dụng Ninject trông như thế này:

[Inject] 
public IDependency YourDependency { get; set; } 
Các vấn đề liên quan