2016-09-07 15 views
2

私は現在、ASP.NET MVC 5用に構築されたライブラリを、StructureMapを使用してDIを行う最新のasp net core 1.0で使用するように更新中です。しかし、私は、StructureMapのハイブリッドライフサイクルが今やレガシーであり、もはやサポートされていないことに気付きました。このライフサイクルの代替品、または同じ機能を実現する方法はありますか?ASP Net Core StructureMap HybridLifecycle replacement

For<SessionContext>() 
    .LifecycleIs<HybridLifecycle>() 
    .Use<SessionContext>(); 

答えて

1

以前のハイブリッドライフサイクルと同じ機能を新しいASP .Netコアと一致させるために、独自のaspネットライフサイクルクラスを作成しました。

public class AspNetCoreLifecycle : ILifecycle { 

    private readonly object mapLock = new object(); 

    public string Description => "Asp Net Core Lifecycle object"; 

    private readonly Container container; 
    private Dictionary<HttpContext, IObjectCache> contextMap = new Dictionary<HttpContext, IObjectCache>(); 

    public AspNetCoreLifecycle(Container cont) { 
     this.container = cont; 

    } 

    public void EjectAll(ILifecycleContext context) { 

     lock (mapLock) { 
      foreach (var kvp in contextMap) { 
       kvp.Value.DisposeAndClear(); 
      } 

      contextMap = new Dictionary<HttpContext, IObjectCache>(); 
     } 
    } 

    public IObjectCache FindCache(ILifecycleContext context) { 

     var accessor = container.GetInstance<IHttpContextAccessor>(); 

     lock (mapLock) { 
      if (!contextMap.ContainsKey(accessor.HttpContext)) { 
       contextMap.Add(accessor.HttpContext, new LifecycleObjectCache()); 
      } 

      return contextMap[accessor.HttpContext]; 
     } 
    } 
} 
関連する問題