After almost a year of using the first version of Single Action Controllers over the ASP.NET MVC (http://rodolfograve.blogspot.com/2011/05/teamcommons-mvc-single-responsibility.html), I have applied a few improvements on it. I particularly didn't like the requirement to inherit from a custom class (SingleActionController), and the boilerplate code required in your Global.asax.
So, the current implementation (also available as a NuGet package at http://nuget.org/packages/TEAM.Commons.Web) doesn't require your controller class to inherit from SingleActionController but from the usual Controller class, and provides a helper method for Autofac users:
Global.asax:
protected void Application_Start() { var builder = new ContainerBuilder(); // Register your dependencies builder.RegisterTypesForSingleActionControllers(Assembly.GetExecutingAssembly(), "Base namespace of your controllers"); }
A controller:
using MyCompany.MyProject.ViewModels.Author; // Name your namespace after your controller. // This works very nicely with the directory structure you create in your project. namespace MyCompany.MyProject.Controllers.Author { // Name your class after your Action and make it inherit from the standard Controller public class Index : Controller { // One single action named Execute public ActionResult Execute(FilterDataModel filter) { ... } } }