Thursday, January 07, 2010

ASP.NET MVC Bootstrapper




Thanks to a comment by thangchung in my last post about the global.asax, I’m going to write up a post using a bootstrapper in my global.cs. So what does that mean? Well basically it’s a technique to boot up your mvc app. Let’s get started!

Step 1: Create your task interface. Mine looks like this:

public interface IStartUpTask
{
void Configure();
}

Pretty simple right? Let’s keep on…


Step 2: Configure StructureMap, otherwise you’re going to have a mess. In my Scan() from my DependencyRegistry, I added x.AddAllTypesOf<IStartUpTask>(); and the completed Scan looks like this:

  Scan(x =>
{
x.TheCallingAssembly();
x.AddAllTypesOf<
IStartUpTask>();
x.WithDefaultConventions();
});

Step 3: Create the Bootstrapper class. Mine looks like this:

    public class Bootstrapper
{
static Bootstrapper()
{
DependencyResolution.
DependencyRegistrar.EnsureDependenciesRegistered();
}

public static void StartUp()
{
var startUpTasks = ObjectFactory.GetAllInstances<IStartUpTask>();

foreach (var task in startUpTasks)
task.Configure();
}
}

The DependencyRegistrar mentioned above, I basically stole from the sample code in the ASP.NET MVC in Action book. I made a few modifications, but not much.


Step 4: Configure your configuration files for all the junk you need to start up.



  • Routes - I took my RouteConfigurator and made it implement IStartUpTask and renamed RegisterRoutes to Configure.
  • MvcContrib InputBuilder – Just made a new class that looks like this:
public class MvcContribConfigurer : IStartUpTask
{
public void Configure()
{
MvcContrib.UI.InputBuilder.
InputBuilder.BootStrap();
}
}


  • Automapper - I already had a configure, so I just tacked on the : IStartUpTask like this:
    public class AutoMapperConfigurator : IStartUpTask
{
public void Configure()
{
Mapper.Initialize(x => x.AddProfile<MyProfile>());
}
}


  • ControllerFactory – I created a new class for it and it looks like this:
 public class ControllerConfigurer : IStartUpTask
{
public void Configure()
{
ControllerBuilder.Current.SetControllerFactory(new ControllerFactory());
}
}

That’s it! So essentially the Global.cs went from this:

protected void Application_Start()
{
MvcContrib.UI.InputBuilder.InputBuilder.BootStrap();
DependencyRegistrar.EnsureDependenciesRegistered();
new RouteConfigurator().RegisterRoutes();
AutoMapperConfigurator.Configure();
ControllerBuilder.Current.SetControllerFactory(new ControllerFactory());
}

to this:

        protected void Application_Start()
{
Bootstrapper.StartUp();
}

Pretty cool stuff! Thanks thangchung for bringing it up!


As always, please comment and thanks for reading!




Shout it

kick it on DotNetKicks.com

Related Posts Plugin for WordPress, Blogger...