Digbyswift is based in Leeds, West Yorkshire offering web and digital solutions. With over a decade of experience in corporate and agency web development, Digbyswift can meet and support your requirements, whether it be MVC or web forms development, Umbraco, bespoke CMS build and maintenance, ecommerce, SEO and Google analytics or even client training. Read more ...

Upgrading to MVC2: No parameterless constructor error

By Digbyswift at February 25, 2010 10:00

I cam across this today and it bugged the hell out of me. I am using a custom ControllerFactory (kindly provided by Steve Sanderson’s awesome Pro ASP.NET MVC Framework) set in the global.asax.cs as such:

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 

    // Configure log4net 
    log4net.Config.XmlConfigurator.Configure(); 

    // Configure CastleWindsor 
    ControllerBuilder
        .Current
        .SetControllerFactory(new WindsorControllerFactory()); 
}

During the upgrade this stopped working and i started getting the following error:

System.MissingMethodException: No parameterless constructor defined for this object


I tracked the error down to the fact the constructors in my Controllers were not being initialized and I found the following quote from the breaking changes section of the What’s New in ASP.NET MVC 2:

Custom controller factories are often used to provide dependency injection for ASP.NET MVC applications. To update the custom controller factories to support ASP.NET MVC 2, change the method signature or signatures to match the new signatures, and use the request context parameter instead of the property.

After a little digging, the only change I needed to make was altering my custom ControllerFactory’s GetControllerInstance() override from:

protected override IController GetControllerInstance(Type controllerType) 
{ 
    return (IController)_container.Resolve(controllerType); 
}


to

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
{ 
    return (IController)_container.Resolve(controllerType); 
}

Discovering MvcContrib

By Digbyswift at September 01, 2009 11:01

Why have I only just found this? Ok, I must admit that when I started researching ASP.Net MVC I was probably overcome with the amount of information I had to digest. So its entirely possible that I missed it or ignored it.

Having briefly read through the documentation MvcContrib provides a massive library of alternatives and additions to the core ASP.Net MVC library. With thousands of downloads, this it usefulness speaks for itself.

So far my personal fave has to be the Grid. I love things that make life easier and this is a gem. There is also a fantastic introduction on the grid this here.

A borrowed example of how easy the Grid is to implement is shown below:

<%= Html.Grid(Model.People).Columns(column => {
         column.For(x => x.Id).Named("Person ID");
         column.For(x => x.Name);
         column.For(x => x.DateOfBirth).Format("{0:d}");
     })
     .Attributes(style => "width:100%")
     .Empty("There are no people.")
     .RowStart(row => "<tr foo='bar'>") %>

Sweeeet.