带 DbContext 的简单注入器 LifetimeScope

Simple Injector LifetimeScope with DbContext

我正在使用 simpleInjector 2.8.0.0 我想在生命周期范围内只构造一个 dbContext 实例。 (我的依赖链有 2 个依赖于 IDatabaseContext/DbContext)

我有一个实现生命周期作用域的作用域装饰器(作用域装饰器被注入到 SignalRHub 中):

  using (ServiceHost.Container.BeginLifetimeScope())
        {
            var commandHandler = ServiceHost.Container.GetInstance<ICommandHandler<TCommand>>();
       //constructs 2 DbContexts.
            commandHandler.Handle(command);
        }

我有 IDatabaseContext 的生命周期注册:

        container.RegisterLifetimeScope<IDatabaseContext, DatabaseContext>();

但是,我可以(从 Guid)看到我正在范围内创建 IDatabaseContext/DbContext 的 2 个实例。

你确定这是同一个范围吗?您要么是嵌套范围,要么您看到的是正在处理的两个实际请求。在调试器中,您可能能够查看请求信息,例如通过检查 HttpContext.Current.Request.Url 属性.