我正在尝试使用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