我正在尝试使用 Mvc 的 Web 扩展的 Dynamo IoC,我看到他们在创建自定义 HttpApplication 以从中派生您的 Global.asax 方面做得很好。但是,我似乎遗漏了一些东西。
我想在我的控制器中完成 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();
}
}
这让我得到“无参数构造函数错误”。我认为 Dynamo 的 Web 扩展已经处理了使 DI 工作所需的一切。
如果我添加一个无参数构造函数,它会被调用,但是我的 ILogger 将为空,并且我将在我的操作方法中获得 NullReferenceException。
我考虑过必须实现一个 ControllerFactory,但我也认为如果它是强制性的,他们会为 MVC 提供它以及所有其他东西,所以我认为我在滥用所提供的东西。
我想知道是否有人知道如何使 DI 在这种情况下工作。谢谢。