1

重複の可能性:
カスタム モデル バインダーに依存関係を挿入し、Ninject を使用して InRequestScope を使用する

NHibernate セッションをカスタム モデル バインダーにバインドしようとしています。

カスタム モデル バインダーはシングルトンのように見えるため、スレッド セーフに注意する必要があると思います。これは私の現在のIoCコードです:

kernel.Bind<ISession>().ToProvider<SessionProvider>().InRequestScope()
    .OnActivation(x => ServiceModelBinder.Service = kernel.Get<IServiceService>());

私のバインダーではThreadStatic、セッションでの同時実行の問題を回避するために、属性で装飾された静的サービス フィールドがあります。

これも良い考えですか?

リクエストごとのスコープ オブジェクトをビュー モデルに挿入するより良い方法はありますか? それとも、紙の上で見栄えが悪いことを心配せずにDependencyResolver、必要な場所から現在のセッションを取得する必要がありますか?

4

1 に答える 1

2

ASP.NET の ThreadStaticAttribute から十分に離れてください。唯一の正しい方法は、HttpContext.Itemsに何かを入れることですが、そのような低レベルのものに行く前に、常に多くのより良い方法を試す必要があります。

ここでの重要な問題は、モデル バインダーがリクエスト間で共有されるという間違った前提で作業していることです。

于 2012-10-08T13:07:31.880 に答える