I’m trying out Dynamo IoC with the web extensions for Mvc, and I see they’ve done a great work creating a custom HttpApplication to derive your Global.asax from. However it seems I’m missing something.
I want to accomplish DI in my controllers, but I’m stuck with the usual “The controller must have a parameterless constructor” problem.
This is what I do in my global.asax (which derives from DynamoMvcAndWebApiApplication):
protected override void RegisterDependencies(Dynamo.Ioc.IIocContainer container)
{
container.Register<ILogger, FakeLogger>();
}
Then my controller:
public class HomeController : Controller
{
private readonly ILogger logger;
public HomeController(ILogger logger)
{
this.logger = logger;
}
public ActionResult Index()
{
logger.Log("test");
return View();
}
}
This gets me the “no parameterless constructor error”. I thought the web extensions of Dynamo already took care of whatever was required to make DI work.
If I add a parameterless constructor it gets called, but then my ILogger will be null, and I’ll get a NullReferenceException in my action method.
I thought about having to implement a ControllerFactory but I also thought that if it was mandatory they would have provided it along with all other stuff for MVC, so I think that I am misusing what is provided.
I’d like to know if anyone knows how to make DI work in this scenario. Thanks.
After a long digging and experimenting, it just seems that Dynamo doesn’t fully integrate with MVC. I tried Ninject integration with MVC and it works fine, out of the box.
My guess is that Dynamo is just “not there yet”, I’ll keep checking on its updates in the future.