2016-09-07 144 views
2

我目前正在更新爲ASP.NET MVC 5構建的庫,以便使用最新的使用StructureMap執行DI的asp網絡核心1.0。但是,我注意到StructureMap中的混合生命週期現在是遺留的,不再受支持。有沒有替代這個生命週期或獲得相同功能的方法?ASP Net核心StructureMap HybridLifecycle替換

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

回答

1

我結束了寫我自己的ASP.NET的生命週期類,以配合新的ASP.NET核心老混合生命週期的相同的功能。

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]; 
     } 
    } 
}