我的目标是拥有一个数据上下文(MainDbContext
) ASP.NET MVC 中的每个 HTTP 请求,并在请求结束时处理数据上下文。
我正在使用以下 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 请求完成时处理数据上下文?或者这只是我需要手动执行的操作Application_EndRequest()
在 Global.asax 中。
Update
我刚刚尝试将以下代码添加到 Global.asax:
protected virtual void Application_EndRequest()
{
ObjectFactory.GetInstance<MainDbContext>().Dispose();
}
正如预期的那样,这解决了问题。然而,我仍然想知道是否有任何方法可以使用 StructureMap 自动执行此操作。
而不是:
x.For<MainDbContext>().HttpContextScoped();
Try:
x.For<MainDbContext>().HttpContextScoped().Use(() => new MainDbContext());
通常情况下,存储库类也需要数据库上下文。所以而不是ObjectFactory.GetInstance<MainDbContext>();
让您的存储库采用一些接口数据库上下文并配置 StructureMap 以注入MainDbContext
进入他们。然后使 StructureMap 将存储库注入控制器,...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)