ASP Net Core StructureMap HybridLifecycle replacement

本文关键字:HybridLifecycle replacement StructureMap Core Net ASP | 更新日期: 2023-09-27 18:06:13

我目前正在更新一个为ASP构建的库。最新的asp.net core 1.0使用StructureMap来做DI。然而,我注意到StructureMap中的混合生命周期现在是遗留的,不再支持。是否有替代这个生命周期的方法,或者有获得相同功能的方法?

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

ASP Net Core StructureMap HybridLifecycle replacement

我最终编写了自己的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];
        }
    }
}