2016-07-26 3 views
0

私のレイアウトビューでは、サービスからキャッシュされたデータを以下のようにレイアウトビューに注入します。MVC5ランタイムデータをレイアウトビューに挿入

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

json形式でキャッシュされた文字列を挿入します。それは動作しますが、私はサービスロケータを使用しなければならず、それはアンチパターンとみなされます。 ここでより良い解決策はありますか?

おかげで、

答えて

0

問題を解決するためには、私はグローバルのActionFilterを使用してviewbagのビューにデータを渡されました。ここにコードがあります。

[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(); 
    } 
} 

登録依存(Autofac)

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

そして表示するために、次の行を追加しました。

<script type="text/javascript"> 
     @(Html.Raw(ViewBag.UIStrings)); 
    </script> 
関連する問題