2016-09-07 111 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]; 
     } 
    } 
}