6

まず、私の質問は Web アプリにのみ適用され、Ninject バインディングの大部分を InRequestScope 解決でセットアップする傾向があります。

私は機能を切り替える方法を考えています.1つの考えは、次のように呼び出すことです:

kernel.Rebind<IInterface>().To<RealImplementation>().InRequestScope();

ウェブサイトがまだ稼働中で、スイッチがフリックされている間。その後、機能をオフにすることにした場合は、電話をかけることができます

kernel.Rebind<IInterface>().To<EmptyImplementation>().InRequestScope();

私の考えでは、InRequestScope は「進行中」のコード リクエストを保護しますが、新しいリクエストが新しく切り替えられた機能を取得できるようにします。

これが機能する可能性があるか、それとも私にとってより多くの問題を引き起こすかどうか、経験(またはNinjectのより深い理解)から誰かが知っていますか. 私は MEF を表面的に見てきたので、この場合、Ninject が最適なツールではない場合、MEF が次の寄港地になるでしょう。

4

1 に答える 1

0

問題の潜在的な原因の1つは、カーネルがスレッドセーフである一方で、単一のスイッチをフリックする必要があることです。そうしないと、処理中のリクエストのアトミックアクションとしてすべてを切り替えるために競争していることになります。(これは原則として、この質問を念頭に置いてコードを確認していません)。

そうは言っても、直接問題を引き起こす可能性のあるものは何も思い浮かびません。

しかし、このタイプの使用に関連する競合状態に基づいてコードを評価した誰かに基づいて、自分自身を満足させたり、十分に強力な保証を得ることができれば、それは理にかなっているかもしれませんが、これは私が聞いた広範な慣行ではありません。実際、AutoFacの設計は、構成入力から不変のファクトリを構築するようなものです。具体的には、このタイプのものを除外します。私の本能は、そのような理由でそのようなアプローチから離れることです。

使用を検討しました.ToMethod(ctx=> return /* Toggle-based creation*/)か?(明らかに、それはそうするように直接物事を述べていませんRebind)。実際の実装(およびバインディングとトグルシステムの性質の両方の複雑さ)によっては、これは理にかなっている場合があります。

于 2012-09-22T06:54:34.000 に答える