Advertisement
CKret

Unity Translation DI

Apr 23rd, 2014
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.77 KB | None | 0 0
  1. /* ControllerFactory */
  2.  
  3. public class UnityControllerFactory : DefaultControllerFactory
  4. {
  5.     private readonly IUnityContainer container;
  6.  
  7.     public UnityControllerFactory(IUnityContainer container)
  8.     {
  9.         this.container = container;
  10.     }
  11.  
  12.     public override IController CreateController(RequestContext requestContext, string controllerName)
  13.     {
  14.         try
  15.         {
  16.             return (IController)container.Resolve(GetControllerType(requestContext, controllerName));
  17.         }
  18.         catch (Exception)
  19.         {
  20.             return base.CreateController(requestContext, controllerName);
  21.         }
  22.     }
  23.  
  24.     protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
  25.     {
  26.         if (controllerType == null) return null;
  27.  
  28.         return this.container.Resolve(controllerType) as IController;
  29.     }
  30.  
  31.     public override void ReleaseController(IController controller)
  32.     {
  33.         container.Teardown(controller);
  34.  
  35.         base.ReleaseController(controller);
  36.     }
  37. }
  38.  
  39. /* Translations */
  40.  
  41. public interface ITranslationRepository
  42. {
  43.     string Translate(string fromText);
  44.     IBaseActionViewModel GetActionTranslations(string action);
  45. }
  46.  
  47. public class TranslationRepository : ITranslationRepository
  48. {
  49.     private readonly IUnityContainer container;
  50.     private readonly Dictionary<string, string> translationDictionary = new Dictionary<string, string>();
  51.  
  52.     public TranslationRepository(IUnityContainer container)
  53.     {
  54.         this.container = container;
  55.  
  56.         translationDictionary.Add("Red", "Rot");
  57.         translationDictionary.Add("Yellow", "Gelb");
  58.         translationDictionary.Add("Green", "Grün");
  59.         translationDictionary.Add("Blue", "Blau");
  60.     }
  61.  
  62.     public string Translate(string fromText)
  63.     {
  64.         string toText;
  65.         translationDictionary.TryGetValue(fromText, out toText);
  66.         return toText ?? fromText;
  67.     }
  68.  
  69.     public IBaseActionViewModel GetActionTranslations(string action)
  70.     {
  71.         return container.Resolve<IBaseActionViewModel>(action);
  72.     }
  73. }
  74.  
  75. /* Models */
  76.  
  77. public interface IBaseActionViewModel
  78. {
  79.     string Name { get; set; }
  80. }
  81.  
  82. public class IndexActionViewModel : IBaseActionViewModel
  83. {
  84.     public string Name { get; set; }
  85.     public string Index { get; set; }
  86.  
  87.     public IndexActionViewModel(ITranslationRepository translationRepository )
  88.     {
  89.         const string text = "Red";
  90.         Name = "IndexAction";
  91.         Index = string.Format("This is the {0} translation \"{1} => {2}\"", Name, text, translationRepository.Translate(text));
  92.     }
  93. }
  94.  
  95. public class AboutActionViewModel : IBaseActionViewModel
  96. {
  97.     public string Name { get; set; }
  98.     public string About { get; set; }
  99.  
  100.     public AboutActionViewModel(ITranslationRepository translationRepository)
  101.     {
  102.         const string text = "Yellow";
  103.         Name = "AboutAction";
  104.         About = string.Format("This is the {0} translation \"{1} => {2}\"", Name, text, translationRepository.Translate(text));
  105.     }
  106. }
  107.  
  108. /* Controller */
  109.  
  110. public abstract class BaseController : Controller
  111. {
  112.     protected ITranslationRepository TranslationRepository { get; private set; }
  113.     protected IBaseActionViewModel ActionViewModel;
  114.  
  115.     protected BaseController(ITranslationRepository translationRepository)
  116.     {
  117.         TranslationRepository = translationRepository;
  118.     }
  119.  
  120.     protected override void OnActionExecuting(ActionExecutingContext filterContext)
  121.     {
  122.         ActionViewModel = TranslationRepository.GetActionTranslations(Request.RequestContext.RouteData.Values["action"].ToString());
  123.         base.OnActionExecuting(filterContext);
  124.     }
  125. }
  126.  
  127. public class HomeController : BaseController
  128. {
  129.     public HomeController(ITranslationRepository translationRepository) : base(translationRepository)
  130.     {
  131.     }
  132.  
  133.     public ActionResult Index()
  134.     {
  135.         return View(ActionViewModel as IndexActionViewModel);
  136.     }
  137.  
  138.     public ActionResult About()
  139.     {
  140.         return View(ActionViewModel as AboutActionViewModel);
  141.     }
  142.  
  143.     public ActionResult Contact()
  144.     {
  145.         ViewBag.Message = "Your contact page.";
  146.  
  147.         return View();
  148.     }
  149. }
  150.  
  151. /* Unity Configuration */
  152.  
  153. public class UnityConfig
  154. {
  155.     private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() =>
  156.     {
  157.         var container = new UnityContainer();
  158.         RegisterTypes(container);
  159.  
  160.         var translationControllerFactory = new UnityControllerFactory(container);
  161.         ControllerBuilder.Current.SetControllerFactory(translationControllerFactory);
  162.  
  163.         return container;
  164.     });
  165.  
  166.     public static IUnityContainer GetConfiguredContainer()
  167.     {
  168.         return container.Value;
  169.     }
  170.  
  171.     public static void RegisterTypes(IUnityContainer container)
  172.     {
  173.         container.RegisterType<ITranslationRepository, TranslationRepository>();
  174.         container.RegisterType<IBaseActionViewModel, IndexActionViewModel>("Index");
  175.         container.RegisterType<IBaseActionViewModel, AboutActionViewModel>("About");
  176.     }
  177. }
  178.  
  179. /* Index View */
  180.  
  181. @model IndexActionViewModel
  182.  
  183. <h2>@Model.Name</h2>
  184. <h3>@Model.Index</h3>
  185.  
  186. /* About View */
  187.  
  188. @model AboutActionViewModel
  189.  
  190. <h2>@Model.Name</h2>
  191. <h3>@Model.About</h3>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement