/*
Kooboo is a content management system based on ASP.NET MVC framework. Copyright 2009 Yardi Technology Limited.
This program is free software: you can redistribute it and/or modify it under the terms of the
GNU General Public License version 3 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program.
If not, see http://www.kooboo.com/gpl3/.
*/
using System;
using System.Web.Mvc;
using System.Reflection;
namespace Everest.Library.Mvc{
public class UnityControllerFactory : IControllerFactory
{
const string ControllersContainer = UnityManager.DefaultContainerName;
private Func<IControllerFactory> defaultControllerFactory;
public UnityControllerFactory()
{
this.defaultControllerFactory = () => new DefaultControllerFactory();
}
#region IControllerFactory Members
/// <summary>
/// Creates the controller.
/// </summary>
/// <param name="requestContext">The request context.</param>
/// <param name="controllerName">Name of the controller,ignorecase.</param>
/// <returns></returns>
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
IController controller = null;
if (UnityManager.Exists<IController>(ControllersContainer, controllerName.ToLower()))
{
controller = UnityManager.ResolveSpecifiedContainer<IController>(ControllersContainer, controllerName.ToLower());
}
else
controller = defaultControllerFactory().CreateController(requestContext, controllerName);
//set the everest context;
//string applicationName = "";
//if (requestContext.RouteData.Values["application"] != null)
//{
// applicationName = requestContext.RouteData.Values["application"].ToString();
//}
EverestContext.CreateEverestContext(false, AppDomain.CurrentDomain.BaseDirectory);
return controller;
}
public void ReleaseController(IController controller)
{
IDisposable disposable = controller as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
#endregion
}
}
|