带 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
属性.
我正在使用 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
属性.