我正在嘗試使用Mvc的Web擴展的Dynamo IoC,並且我看到他們已經完成了創建自定義HttpApplication以從中派生Global.asax的出色工作。但是,似乎我錯過了一些東西。Dynamo IoC和Mvc
我想在我的控制器中完成DI,但我堅持使用通常的「控制器必須有無參數構造函數」的問題。
這是我在Global.asax中(從DynamoMvcAndWebApiApplication
派生)做:
protected override void RegisterDependencies(Dynamo.Ioc.IIocContainer container)
{
container.Register<ILogger, FakeLogger>();
}
然後我的控制器:
public class HomeController : Controller
{
private readonly ILogger logger;
public HomeController(ILogger logger)
{
this.logger = logger;
}
public ActionResult Index()
{
logger.Log("test");
return View();
}
}
這讓我 「無參數的構造函數錯誤」。我認爲迪納摩的網絡擴展已經照顧了使DI工作所需的任何東西。
如果我添加一個無參數的構造函數,它會被調用,但是然後我的ILogger將爲null,並且在我的action方法中會得到一個NullReferenceException異常。
我想過必須實現一個ControllerFactory,但我也認爲如果它是強制性的,他們會提供它與MVC的所有其他東西,所以我認爲我濫用提供的東西。
我想知道是否有人知道如何使DI在這種情況下工作。謝謝。
我在我的手機上,或者這將是一個完整的答案,但看看在System.Web.Mvc的DependencyResolver類 – rossipedia
感謝您的興趣,但自定義HttpApplication已經負責設置DependencyResolver與定製的一個與IoC容器一起提供。我的問題在於讓Controllers沒有無參數構造函數。 –
這很奇怪。我當前的mvc項目中沒有任何控制器具有默認的構造函數,它們工作得很好。 – rossipedia