【发布时间】:2021-10-27 14:16:59
【问题描述】:
我创建了一个 Masstransit 发布过滤器,它根据访问者提供的信息创建消息头。
我想在处理过程中在访问器中设置一些值,这些值将被发布过滤器拾取。
我理解过滤器的方式是,它们是有范围的,因此,任何发布的消息都会创建一个新的 DI 范围。这意味着我在发布消息之前设置的值将在过滤器中不可用。
public interface IAccessor
{
Guid Id {get;set;}
}
public class Accessor : IAccessor
{
public Guid Id {get;set;}
}
public class MyPublishFilter<T> : IFilter<PublishContext<T>> where T : class
{
private readonly IAccessor accessor;
public MyPublishFilter(IAccessor accessor)
=> this.accessor = accessor; <-- this accessor is different to the one in MyProgram
public async Task Send(PublishContext<T> context, IPipe<PublishContext<T>> next)
{
context.CorrelationId = accessor.Id;
await next.Send(context);
}
public class MyProgram
{
public MyProgram(IAccessor accessor) => this.accessor = accessor;
public async Task DoThing()
{
accessor.Id = Guid.NewGuid(); <--- this value is not passed to the filter
messageBus.Publish(new Message());
}
}
有没有办法告诉 MassTransit 不要为消息过滤器创建新范围?
【问题讨论】:
标签: c# .net-core masstransit