To create the custom controller factory you need to implement IControllerFactory Interface and register the class in global.asax. Bellow mention code explains how we can load a controller on the basis of browser language selection .
Example
Example
customeControllerFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Configuration;
using System.EnterpriseServices;
namespace MyViewEngine.CustomControllerFactory
{
public class customeControllerFactory : IControllerFactory
{
public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
if (string.IsNullOrEmpty(controllerName))
throw new ArgumentNullException("controllerName");
string language = requestContext.HttpContext.Request.Headers["Accept-Language"];
string controllerType = string.Empty;
if (language == "fa-IR")
controllerType = string.Format(ConfigurationManager.AppSettings["FarsiControllerTypePattern"], controllerName+"Controller");
else
controllerType = string.Format(ConfigurationManager.AppSettings["EnglishControllerTypePattern"], controllerName + "Controller");
var t = Type.GetType(controllerType);
IController controller = Activator.CreateInstance(Type.GetType(controllerType)) as IController;
return controller;
}
public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(System.Web.Routing.RequestContext requestContext, string controllerName)
{
return System.Web.SessionState.SessionStateBehavior.Default;
}
public void ReleaseController(IController controller)
{
if (controller is IDisposable)
(controller as IDisposable).Dispose();
else
controller = null;
}
}
}
--------------------------------------------------------------------------------------------------------------
In Global.asax register on application start the code mark in red
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(typeof(customeControllerFactory));
}
--------------------------------------------------------------------------------------------------------------
In application level web.config you need to add the following code
<appSettings>
<add key="EnglishControllerTypePattern" value="MyViewEngine.Controllers.En.{0}, CustomViewEngine"/>
<add key="FarsiControllerTypePattern" value="MyViewEngine.Controllers.Fa.{0}"/>
</appSettings>
No comments:
Post a Comment