Gần đây tôi đã cố gắng thực thi việc tiêm phụ thuộc bằng cách sử dụng StructureMap. Tôi quản lý để làm theo các ví dụ tất cả các cách nhưng tôi gặp phải một ngoại lệ ném mỗi khi tôi cố gắng để chạy các ứng dụng. Dưới đây là một số đoạn mã từ nhà máy điều khiển của tôi.Custom Controller Factory, Dependency Injection/Các vấn đề về cấu trúc với ASP.NET MVC
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
if (controllerType == null)
throw new ArgumentNullException("controllerType");
return ObjectFactory.GetInstance(controllerType) as Controller;
}
}
My Global.asax gọi một lớp bootstrapper tĩnh mà đăng ký tất cả các phụ thuộc của tôi, nhưng có vẻ như GetControllerInstance của StructureMapControllerFactory là nhận được gọi là hai lần. Lần đầu tiên nó được gọi, một controllerType thích hợp được truyền vào nhưng nó luôn luôn là null trong lần gọi thứ hai.
Lần đầu tiên GetControllerInstance được gọi, loại được đặt thành HomeController đúng. Mã lửa trong HomeController và nó trả về View(). Trên sự trở lại của View(), sự kiện Page_Load được gọi trên tệp aspx. Sau khi bước qua đó, nó đến một dòng:
httpHandler.ProcessRequest (HttpContext.Current);
Đó là nơi mà GetControllerInstance được gọi là lần thứ hai.
Dưới đây là bit Global.asax của tôi mà có thể liên quan:
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
Bootstrapper.ConfigureStructureMap();
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
Tôi rất mong muốn được làm việc dependency injection và sẽ được đánh giá cao nhất nếu có ai có thể giúp tôi ra ngoài. :)
Dude, tôi cũng gặp vấn đề tương tự. – Micah
Làm cách nào để bạn đăng ký bộ điều khiển? – Sebastian
Mô tả sự cố tốt. –