ASP Net Core StructureMap HybridLifecycle替代品

时间:2016-09-07 12:53:41

标签: c# asp.net asp.net-core structuremap

我目前正在更新为ASP.NET MVC 5构建的库,以便与使用StructureMap进行DI的最新asp net core 1.0一起使用。但是,我注意到StructureMap中的Hybrid生命周期现在是遗留的,不再受支持。是否有替代这个生命周期,或者获得相同功能的方法?

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

1 个答案:

答案 0 :(得分:1)

我最终编写了自己的asp网络生命周期类,以便将旧的Hybrid生命周期的相同功能与新的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];
        }
    }
}