gpt4 book ai didi

asp.net - 使用 HttpContextScoped() 时 StructureMap 不会处理数据上下文

转载 作者:行者123 更新时间:2023-12-02 16:02:08 24 4
gpt4 key购买 nike

我的目标是在 ASP.NET MVC 中为每个 HTTP 请求提供一个数据上下文 (MainDbContext),并在请求结束时释放该数据上下文。

我正在使用以下 StructureMap 配置:

public static class ContainerConfigurer
{
public static void Configure()
{
ObjectFactory.Initialize(x =>
{
x.For<MainDbContext>().HttpContextScoped();
});
}
}

每当我需要 MainDbContext 时,我都会使用以下代码:

var dbContext = ObjectFactory.GetInstance<MainDbContext>();

这按预期工作:每个 HTTP 请求仅创建一个数据上下文。问题是,MainDbContext 没有在请求结束时被释放。

如何配置 ObjectFactory 以在 HTTP 请求完成时处理数据上下文?或者这只是我需要在 Global.asax 中使用 Application_EndRequest() 手动执行的操作。

更新

我刚刚尝试将以下代码添加到 Global.asax:

protected virtual void Application_EndRequest()
{
ObjectFactory.GetInstance<MainDbContext>().Dispose();
}

正如预期的那样,这解决了问题。不过,我仍然想知道是否有任何方法可以使用 StructureMap 自动执行此操作。

最佳答案

而不是:

x.For<MainDbContext>().HttpContextScoped();

尝试:

x.For<MainDbContext>().HttpContextScoped().Use(() => new MainDbContext());

通常情况下,存储库类需要数据库上下文。所以而不是 ObjectFactory.GetInstance<MainDbContext>();让您的存储库采用一些接口(interface)数据库上下文并配置 StructureMap 以注入(inject) MainDbContext进入他们。然后使 StructureMap 将存储库注入(inject) Controller ,...

Application_EndRequest :

protected void Application_EndRequest()
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}

关于asp.net - 使用 HttpContextScoped() 时 StructureMap 不会处理数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6390608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com