2016-09-07 3 views
2

현재 ASP.NET MVC 5가 StructureMap을 사용하여 최신 DINet Core 1.0과 함께 사용하도록 빌드 된 라이브러리를 업데이트하는 중입니다. 그러나, 나는 StructureMap의 하이브리드 라이프 사이클이 지금은 레거시이며 더 이상 지원되지 않는다는 것을 알았습니다. 이 라이프 사이클을 대신 할 대체품이 있는가, 아니면 동일한 기능을 사용할 수있는 방법이 있습니까?ASP Net 핵심 구조 StructureMap HybridLifecycle 대체

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

답변

1

필자는 이전의 하이브리드 수명주기와 동일한 기능을 새로운 ASP .Net 코어와 동일하게 만들기 위해 자체 asp net lifecycle 클래스를 작성했습니다.

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