Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* ControllerFactory */
- public class UnityControllerFactory : DefaultControllerFactory
- {
- private readonly IUnityContainer container;
- public UnityControllerFactory(IUnityContainer container)
- {
- this.container = container;
- }
- public override IController CreateController(RequestContext requestContext, string controllerName)
- {
- try
- {
- return (IController)container.Resolve(GetControllerType(requestContext, controllerName));
- }
- catch (Exception)
- {
- return base.CreateController(requestContext, controllerName);
- }
- }
- protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
- {
- if (controllerType == null) return null;
- return this.container.Resolve(controllerType) as IController;
- }
- public override void ReleaseController(IController controller)
- {
- container.Teardown(controller);
- base.ReleaseController(controller);
- }
- }
- /* Translations */
- public interface ITranslationRepository
- {
- string Translate(string fromText);
- IBaseActionViewModel GetActionTranslations(string action);
- }
- public class TranslationRepository : ITranslationRepository
- {
- private readonly IUnityContainer container;
- private readonly Dictionary<string, string> translationDictionary = new Dictionary<string, string>();
- public TranslationRepository(IUnityContainer container)
- {
- this.container = container;
- translationDictionary.Add("Red", "Rot");
- translationDictionary.Add("Yellow", "Gelb");
- translationDictionary.Add("Green", "Grün");
- translationDictionary.Add("Blue", "Blau");
- }
- public string Translate(string fromText)
- {
- string toText;
- translationDictionary.TryGetValue(fromText, out toText);
- return toText ?? fromText;
- }
- public IBaseActionViewModel GetActionTranslations(string action)
- {
- return container.Resolve<IBaseActionViewModel>(action);
- }
- }
- /* Models */
- public interface IBaseActionViewModel
- {
- string Name { get; set; }
- }
- public class IndexActionViewModel : IBaseActionViewModel
- {
- public string Name { get; set; }
- public string Index { get; set; }
- public IndexActionViewModel(ITranslationRepository translationRepository )
- {
- const string text = "Red";
- Name = "IndexAction";
- Index = string.Format("This is the {0} translation \"{1} => {2}\"", Name, text, translationRepository.Translate(text));
- }
- }
- public class AboutActionViewModel : IBaseActionViewModel
- {
- public string Name { get; set; }
- public string About { get; set; }
- public AboutActionViewModel(ITranslationRepository translationRepository)
- {
- const string text = "Yellow";
- Name = "AboutAction";
- About = string.Format("This is the {0} translation \"{1} => {2}\"", Name, text, translationRepository.Translate(text));
- }
- }
- /* Controller */
- public abstract class BaseController : Controller
- {
- protected ITranslationRepository TranslationRepository { get; private set; }
- protected IBaseActionViewModel ActionViewModel;
- protected BaseController(ITranslationRepository translationRepository)
- {
- TranslationRepository = translationRepository;
- }
- protected override void OnActionExecuting(ActionExecutingContext filterContext)
- {
- ActionViewModel = TranslationRepository.GetActionTranslations(Request.RequestContext.RouteData.Values["action"].ToString());
- base.OnActionExecuting(filterContext);
- }
- }
- public class HomeController : BaseController
- {
- public HomeController(ITranslationRepository translationRepository) : base(translationRepository)
- {
- }
- public ActionResult Index()
- {
- return View(ActionViewModel as IndexActionViewModel);
- }
- public ActionResult About()
- {
- return View(ActionViewModel as AboutActionViewModel);
- }
- public ActionResult Contact()
- {
- ViewBag.Message = "Your contact page.";
- return View();
- }
- }
- /* Unity Configuration */
- public class UnityConfig
- {
- private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() =>
- {
- var container = new UnityContainer();
- RegisterTypes(container);
- var translationControllerFactory = new UnityControllerFactory(container);
- ControllerBuilder.Current.SetControllerFactory(translationControllerFactory);
- return container;
- });
- public static IUnityContainer GetConfiguredContainer()
- {
- return container.Value;
- }
- public static void RegisterTypes(IUnityContainer container)
- {
- container.RegisterType<ITranslationRepository, TranslationRepository>();
- container.RegisterType<IBaseActionViewModel, IndexActionViewModel>("Index");
- container.RegisterType<IBaseActionViewModel, AboutActionViewModel>("About");
- }
- }
- /* Index View */
- @model IndexActionViewModel
- <h2>@Model.Name</h2>
- <h3>@Model.Index</h3>
- /* About View */
- @model AboutActionViewModel
- <h2>@Model.Name</h2>
- <h3>@Model.About</h3>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement