Lightinject - 如何安全地开始新的范围外组合根?

问题描述

我有 Windows 服务接受一些消息。我使用 LightInject 进行 DI。每次收到任何消息时,服务都会通过 dbContext 写入数据库。因此,我需要将 dbContext 的生命周期限制为处理该消息,并在处理消息后处理它。我想知道是否可以为每条消息创建自己的范围。但我很难找到如何干净利落地做到这一点。

我有一些监听器可以让处理程序处理每条收到的消息。我需要在消息接收事件上创建范围。但是,正如在消费者的现有实例中一样,我没有可以在其上开始新范围的容器。而且我不能注入容器本身,因为这是不好的做法而且根本不起作用。那么有没有什么办法可以在我的自定义事件上创建新的范围在组合根之外的任何地方?

我需要这样的东西:

服务根:

serviceRegistry.Register<IMessageConsumer,createuserMessageConsumer>(
    new PerContainerLifetime());
serviceRegistry.Register<RequestHandler,UserCreateHandler>(
    new PerScopeLifetime());
serviceRegistry.Register<DbContext,MyDbContext>(
    new PerScopeLifetime());

消费者:

createuserMessageConsumer(createuserHandler handler)
{
    this.handler = handler;
}

public async Listen()
{
    //listening producing message
    ....
    using(container.BeginScope())    //this is the problematic part
    {
        this.handler.Handle(message);
    }       
}

处理程序:

createuserHandler(DbContext context)
{
    this.dbContext = context;
}
    
public void Handle(Message message)
{
    //do some db magic with dbContext
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)