C# 在没有System.Web的情况下使用OWIN时,使用什么代替HttpContext

C# 在没有System.Web的情况下使用OWIN时,使用什么代替HttpContext,c#,httpcontext,owin,nancy,system.web,C#,Httpcontext,Owin,Nancy,System.web,我们目前有一个NancyFx项目,我们已经使用OWIN连接起来。我们没有使用System.Web,我们需要一些地方来放置我们的上下文,而不是HttpContext。我们已经开始在线程静态变量上实现上下文,这样我们就可以在应用程序中的任何位置访问上下文,但是我们担心使用异步调用会丢失这个线程静态上下文 当您脱离System.Web时,在HttpContext的lue中使用什么作为静态访问器 您可以改用NancyContext。NancyContext上的Items字典用于存储每个请求的对象。Nan

我们目前有一个NancyFx项目,我们已经使用OWIN连接起来。我们没有使用System.Web,我们需要一些地方来放置我们的上下文,而不是HttpContext。我们已经开始在线程静态变量上实现上下文,这样我们就可以在应用程序中的任何位置访问上下文,但是我们担心使用异步调用会丢失这个线程静态上下文


当您脱离System.Web时,在HttpContext的lue中使用什么作为静态访问器

您可以改用NancyContext。NancyContext上的Items字典用于存储每个请求的对象。NancyContext在Nancy应用程序中的任何位置都可用。

此线程可能会回答您的问题:

public类引导程序:DefaultNancyBootstrapper
{
受保护的覆盖无效ConfigureRequestContainer(
TinyIoCContainer容器,NancyContext上下文)
{
ConfigureRequestContainer(容器、上下文);
集装箱。登记(
(c,o)=>新的CurrentRequest(上下文);
}
私有类CurrentRequest:ICurrentRequest
{
公共CurrentRequest(NancyContext上下文)
{
this.Context=Context;
}
公共NancyContext上下文{get;private set;}
}
}

能否静态访问NancyContext?我们不想将上下文传递给每个需要它的方法。不,但它可以作为NancyModule上的属性提供,也可以作为Before、After、OnError钩子的参数提供。您从哪里需要它?目前,我们在HttpContext中填充有关请求状态的内容,并从应用程序中的任何位置提取该上下文。我们将非业务级对象存储在HttpContext中,这样就不必通过调用的每个方法传递它们。IIS管理每个请求的HttpContext,因此我们始终可以从应用程序中的任何位置对上下文进行静态访问。我想您只需传递NancyContext就可以了。创建HttpContext。当前的静态是MS做过的最糟糕的事情,因此有太多设计糟糕的应用程序。。。
public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureRequestContainer(
        TinyIoCContainer container, NancyContext context)
    {
        base.ConfigureRequestContainer(container, context);
        container.Register<ICurrentRequest>(
          (c, o) => new CurrentRequest(context));
    }

    private class CurrentRequest : ICurrentRequest
    {
        public CurrentRequest(NancyContext context)
        {
            this.Context = context;
        }

        public NancyContext Context { get; private set; }
    }
}