2016-07-26 22 views
0

In meiner Layout-Ansicht injiziere ich einige zwischengespeicherte Daten aus dem Service in die Layout-Ansicht wie unten;MVC5 Runtime-Daten in Layout-Ansicht einfügen

<script type="text/javascript"> 
     @(Html.Raw(EngineContext.Current.Resolve<IStringService>().GetStringsJson())); 
    </script> 

Es injiziert Cache-Strings im JSON-Format. Es funktioniert, aber ich musste Service Locator verwenden und es gilt als Anti-Pattern. Was wäre hier eine bessere Lösung?

Danke,

Antwort

0

das Problem zu lösen, ich habe die Daten in die Ansicht in viewbag ein globales Action und weitergegeben verwendet. Hier ist der Code;

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] 
public sealed class GlobalValuesActionFilter : ActionFilterAttribute 
{ 
    private readonly ICacheService _cacheService; 

    public GlobalValuesActionFilter(ICacheService cacheService) 
    { 
     this._cacheService = cacheService; 
    } 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.Controller.ViewBag.UIStrings = _cacheService.GetUIStrings(); 
    } 
} 

Registrieren Abhängigkeit (Autofac)

builder.Register(c => new GlobalValuesActionFilter(c.Resolve<ICacheService>())) 
         .AsActionFilterFor<Controller>().InstancePerRequest(); 

und zu der Ansicht folgende Zeile;

<script type="text/javascript"> 
     @(Html.Raw(ViewBag.UIStrings)); 
    </script>