每个消息范围的公共交通结构图
Masstransit Structuremap per message scope
我正在使用 Entity Framework 的存储库模式,我在每个存储库中注入 DbContext。我有一个 MassTransit 消费者的多个存储库。每个存储库必须在消费单个消息的范围内共享 DbContext。
我需要在 DbContext 上放置一个每条消息的生命周期范围。我该怎么做?
For<DbContext>().Use<DbContext>();
For<MyConsumer>().Use<MyConsumer>();
For<IRepository1>.Use<Repository1>();
For<IRepository2>.Use<Repository2>();
For<IServiceBus>().Singleton().Use("bookingServicesServiceBus", ctx =>
{
var bus = ServiceBusFactory.New(sbc =>
{
sbc.Subscribe(s => s.LoadFrom(ctx.GetInstance<IContainer>()));
});
return bus;
});
Doh 解决方案很明显。 MassTransit.Structuremap nuget 包实际上使用嵌套容器处理每条消息的范围。
但是,由于某些未知原因,我将 DbContext 注册为 HybridHttpOrThreadLocalScoped。
我正在使用 Entity Framework 的存储库模式,我在每个存储库中注入 DbContext。我有一个 MassTransit 消费者的多个存储库。每个存储库必须在消费单个消息的范围内共享 DbContext。
我需要在 DbContext 上放置一个每条消息的生命周期范围。我该怎么做?
For<DbContext>().Use<DbContext>();
For<MyConsumer>().Use<MyConsumer>();
For<IRepository1>.Use<Repository1>();
For<IRepository2>.Use<Repository2>();
For<IServiceBus>().Singleton().Use("bookingServicesServiceBus", ctx =>
{
var bus = ServiceBusFactory.New(sbc =>
{
sbc.Subscribe(s => s.LoadFrom(ctx.GetInstance<IContainer>()));
});
return bus;
});
Doh 解决方案很明显。 MassTransit.Structuremap nuget 包实际上使用嵌套容器处理每条消息的范围。
但是,由于某些未知原因,我将 DbContext 注册为 HybridHttpOrThreadLocalScoped。