[英]InstancePerRequest DbContext ASP.NET MVC
在 ASP.NET MVC 應用程序中將 DbContext 注冊為InstancePerRequest
。 ( IoC Autofac
)
builder.RegisterType<ADbContext>().As<IADbContext>().InstancePerRequest();
在BService
內部BService
public class BService : IBService
{
readonly IADbContext _dbContext;
public BService(IADbContext dbContext)
{
_dbContext = dbContext;
}
}
嘗試將IBService
注冊為單例。
builder.RegisterType<BService>().As<IBService>().SingleInstance();
顯然,這給了我一個錯誤
從請求實例的范圍中看不到具有匹配“AutofacWebRequest”標簽的范圍。
最簡單的解決方案是將IBService
注冊為InstancePerRequest
,但沒有理由使用 PerRequest IBService
而不是上面提到的錯誤消息。
如何在 Singleton 服務中使用PerRequest
DbContext
?
第一次嘗試,您可以將 IContainer 注入 BService。 但這看起來像服務定位器模式,這並不好。 否則,您可以定義工廠接口
public interface IFactory<T>
{
T GetInstance();
}
然后實現並注冊
public class SimpleFactory<T> : IFactory<T>
{
private IContainer _container;
public SimpleFactory(IContainer container)
{
_container = container;
}
public T GetInstance()
{
return _container.Resolve<T>();
}
}
public class DbContextFactory : SimpleFactory<IADbContext>
{
public DbContextFactory(IContainer container):base(container)
{
}
}
最后,在你的單音中使用這個工廠
public class BService : IBService
{
IADbContext _dbContext => _dbContextFactory.GetInstance();
IFactory<IADbContext> _dbContextFactory
public BService(IFactory<IADbContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
}
}
每次,當您想要訪問單音內的上下文時,它都會將此請求傳遞給 IoC 容器,該容器能夠返回每個請求的上下文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.