Asp.net core 中间件和使用者之间的共享范围

Asp.net core 中间件和使用者之间的共享范围,asp.net-core,dependency-injection,masstransit,Asp.net Core,Dependency Injection,Masstransit,目标:读取消息头并将其放置在作用域依赖项(IHeaderData,它是类型化数据)中,所有需要IHeaderData(构造函数注入)的使用者都可以使用该依赖项 到目前为止,我只能使用有效载荷“存储”我的数据。但这对消费者来说需要一些脚踏实地的工作,我希望他们能提出要求(如果他们需要的话) 我一直在尝试在中间件中创建一个新的作用域,然后将headerdata设置为在该作用域中检索的对象。但在消费者中要求IHeaderData时,我似乎仍然得到了一个新的范围 编辑: 这里有一点进步。通过从有效负载获

目标:读取消息头并将其放置在作用域依赖项(IHeaderData,它是类型化数据)中,所有需要IHeaderData(构造函数注入)的使用者都可以使用该依赖项

到目前为止,我只能使用有效载荷“存储”我的数据。但这对消费者来说需要一些脚踏实地的工作,我希望他们能提出要求(如果他们需要的话)

我一直在尝试在中间件中创建一个新的作用域,然后将headerdata设置为在该作用域中检索的对象。但在消费者中要求IHeaderData时,我似乎仍然得到了一个新的范围

编辑: 这里有一点进步。通过从有效负载获取IServiceScope,我现在可以获取headerdata,它将在使用者中可用(构造函数注入)

公共异步任务发送(TContext ctx,IPipe next)
{
if(ctx是ConsumeContext ConsumeContext&&ConsumeContext.TryGetPayload(超出IServiceScope范围))
{
var headerData=scope.ServiceProvider.GetService();
headerData.Data1=consumercontext.Headers.Get(“x-Data1”);
}
等待下一步。发送(上下文);
}

我想找一些关于有效载荷的文档。我真的不明白它是怎么工作的。为什么IServiceScope突然出现在有效负载中?

请包含您尝试过的代码片段。这个网站的目的是让人们帮助你解决阻碍你自己解决问题的问题,而不是为你整体解决问题。你说的“使用有效载荷存储数据”是什么意思?这是什么类型的数据?某些集合绑定到请求,这是请求特有的?
HttpContext。功能可能更适合您,定义
IHeaderFeature
接口和类,并将其添加到
HttpContext.Features
。在请求期间,它将可用于可访问HttpContext的任何地方,然后您可以使用一个简单的服务注入
IHttpContextAccessor
并访问和返回数据。如果您需要它的http头,只需执行相同的操作,但不带
HttpContext.Features
(请求头已可用)
public async Task Send(TContext ctx, IPipe<TContext> next)
{
    if (ctx is ConsumeContext consumeContext && consumeContext.TryGetPayload(out IServiceScope scope))
    {
        var headerData = scope.ServiceProvider.GetService<IHeaderData>();

        headerData.Data1 = consumeContext.Headers.Get<string>("x-data1)";
    }

    await next.Send(context);
}