【发布时间】:2015-05-25 17:39:26
【问题描述】:
我正在为 Web API 2 项目使用 StructureMap.WebApi2 nuget 包来管理依赖注入。 在 DefaultRegistry.cs 类中,我提到了所需的所有依赖项 每个请求都使用嵌套容器。
For<IScoreRepository>().Use<ScoreRepository>();
For<IExternalUsersAuditRepository>().Use<ExternalUsersAuditRepository>();
For<ITestScanService>().Use<TestScanService>();
// hook up specific questionnaire datacontext
For<SportsDataContext>().LifecycleIs(new HttpContextLifecycle())
.Use(c => new SportsDataContext(
ConfigurationManager.ConnectionStrings["Database"].ConnectionString));
// hook up datacontext for data and services
For<QuestionDataContext>().LifecycleIs(new HttpContextLifecycle())
.Use(c => new QuestionDataContext(
ConfigurationManager.ConnectionStrings["Database"].ConnectionString));
在以前版本的结构映射中,HttpContextScoped 可用,但在最新版本 3.0.0.0 中不再可用,因此我将 LifeCycle 设置为 HttpContextLifeCycle。
Linq to Sql Datacontext 对象正在处理,我收到以下错误:
无法访问已释放的对象。\r\n对象名称: 'DataContext 在 Dispose 后访问'
如果我对Datacontext 使用Singleton 或ThreadLocalStorageLifecycle 范围,它工作正常。但我想将 DataContext 对象的范围限定为每个 Http 请求。
如何将Datacontext 对象限定为每个 Http 请求?
我参考了以下文章,但它不适用于HttpContextLifeCycle:
http://ignipro.blogspot.in/2012/09/structuremap-scopes-and-life-cycles.html
【问题讨论】:
标签: entity-framework dependency-injection asp.net-web-api2 dbcontext structuremap3