0

我有一个 C# MVC3 站点。但是,我需要在同一个请求中将对象共享给多个类。
其他请求无法访问/不知道共享对象存在。
请求结束后,应该删除共享对象。

此示例代码可以将对象分配给每个请求,而不是仅在一个请求中共享对象。

Class ShareObjects
{
    private static SomeThing _Data = null;
    public static SomeThing Data
    {
        get
        {
            if (_Data == null)
            {
                _Data = new SomeThing();
            }

            return _Data;
        }
    }
}

Class ObjectA
{
    public ObjectA()
    {
        var data = ShareObjects.Data;
        //Do stuff
    }
}

Class ObjectB
{
    public ObjectB()
    {
        var data = ShareObjects.Data;
        //Do stuff
    }
}
4

1 回答 1

2

您可以将代码添加到 global.asax.cs:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var customContext = CustomHttpContext.Initialize(new HttpContextWrapper( Context) );
}

正如您在上面的代码中所见,我们所做的是将它挂在 HttpContext 上。CustomHttpContext Initialize 例程如下所示:

public static CustomHttpContext Initialize(HttpContextBase httpContextBase)
{
    Guard.IsNotNull(httpContextBase, "httpContext");

    // initialize only once
    if (! httpContextBase.Items.Contains(key))
    {
        CustomHttpContext newCustomHttpContext = new CustomHttpContext();
        httpContextBase.Items[key] = newCustomHttpContext;
        return newCustomHttpContext;
    }
    return Get(httpContextBase);
}

完成后。您可以通过提供上下文来调用 CustomHttpContext:

CustomHttpContext.Get(HttpContext).PropA;

希望这可以帮助。

于 2012-04-19T08:14:14.117 回答