public class MvcApplication : HttpApplication, IContainerAccessor
{ #region Members
private static IUnityContainer _container;
#endregion
#region Properties
/// <summary>
/// The Unity container for the current application
/// </summary>
public static IUnityContainer Container
{ get
{ return _container;
}
}
#endregion
#region IContainerAccessor Members
/// <summary>
/// Returns the Unity container of the application
/// </summary>
IUnityContainer IContainerAccessor.Container
{ get { return Container; } }
#endregion
#region Application Events
protected void Application_Start()
{ RegisterRoutes(RouteTable.Routes);
InitContainer();
ControllerBuilder.Current.SetControllerFactory(typeof(UnityControllerFactory));
}
protected void Application_End(object sender, EventArgs e)
{ CleanUp();
}
#endregion
#region Methods
public static void RegisterRoutes(RouteCollection routes)
{ routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );
}
private static void InitContainer()
{ if (_container == null)
{ _container = new UnityContainer();
}
// Register the relevant types for the
// container here through classes or configuration
_container.RegisterType<IMessageService, MessageService>();
}
private static void CleanUp()
{ if (Container != null)
{ Container.Dispose();
}
}
#endregion
}