0

依存性注入を管理するために、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));

以前のバージョンの structuremap HttpContextScoped では利用できましたが、最新バージョン 3.0.0.0 では利用できなくなったため、LifeCycle を HttpContextLifeCycle としてセットアップしました。

Linq to Sql Datacontext オブジェクトが破棄され、次のエラーが発生します。

破棄されたオブジェクトにアクセスできません。\r\nオブジェクト名: 'DataContext は Dispose 後にアクセスされました'

を使用SingletonまたはThreadLocalStorageLifecycleスコープすると、正常に機能しDatacontextます。DataContextしかし、オブジェクトを Per Http Requestにスコープしたいと考えています。

DatacontextHttp リクエストごとにオブジェクトのスコープを設定するにはどうすればよいですか?

以下の記事を参考にしましたが、動作しませんHttpContextLifeCycle

http://ignipro.blogspot.in/2012/09/structuremap-scopes-and-life-cycles.html

4

1 に答える 1

0

Web API2 に使用するホスティングに応じて、古い

http://structuremap.github.io/object-lifecycle/supported-lifecycles/#aspnetから

StructureMap チームは、古い ASP.Net ライフサイクルを使用しないことを強く推奨しています。.Net の最新の Web フレームワークのほとんどは、要求ごとにネストされたコンテナーを使用して、同じスコープをより適切な方法で実現します。

使用する必要があるのは次のとおりです。

StructureMap - ネストされたコンテナ (リクエスト/トランザクションごと)

このブログ投稿を読むと、それを段階的に実装する方法が説明されています。

ASP.NET MVC で Structuremap 3 を利用する

最も簡単な答えは、Nuget パッケージの Structuremap.MVC4、Structuremap.MVC5、および Structuremap.WebAPI2 が Structuremap のネストされたコンテナーを使用することです。

于 2015-05-26T08:30:40.623 に答える