2009-07-21 11 views
0

誰かがIoCコンテナを私に言及したとき、私はMVCに慣れ始めたばかりです。今は数千フィートも落ちてしまい、再びバックアップする必要があります。私はそれらを無視するように誘惑されましたが、コンポーネントライフスタイルを読みました。私のリポジトリLifestyleがPerWebRequestの代わりにシングルトンに設定されている場合、これは大きな問題のようです。説明したように、私はデータベースの更新に対するコミットされていない変更がリークする可能性があります。MVC IoCコンポーネントライフスタイルPerWebRequest

私の質問... コンポーネントライフスタイルを作成する方法は、IoCコンテナを使用せずに影響するか、それとも唯一のオプションですか?

答えて

0

実装は常にシングルトンとして作成できます。リポジトリについて話すとき、私は必要があるとは思わない。これは、IoCを使用する実際の目的ではありません。 IoCを使用すると、コードのユーザーが実装自体から切り離されます。必要に応じて物事を入れ替えることができるので、テストがより簡単になります。また、私の場合は、他の目的にも非常に便利です。たとえば、キャッシングを実行します。私のローカル開発者では、Lucene.NETを使用してキャッシュ実装にディスクベースのキャッシュを提供しています。次に私が開発プラットフォームとステージングプラットフォームにプッシュするとき、私は標準の.netキャッシュ実装を使用します。それから私が生産にプッシュするとき、私はVelocityまたはMemCachedの実装を使用するかもしれません。私はStructureMap(私の好みのIoCコンテナ)を使用しているので、ポイントAからポイントBになるためには何もする必要はありません。

は、IoCの決定よりも設計上の決定の方が多いようです。オブジェクトの寿命を管理するためにここで述べた3つのメソッドはすべて、IoCなしで行うことができます...しかし、これはIoCの興味深い副作用(場合によっては)です。

+1

ありがとうございます...私のコードをデカップリングするのはいいです*しかし、現時点では私にとっては重要ではありません。しかし、要求を越えたデータの整合性は重要です。私の懸念は、IoCなしでは、私のアプリが潜在的な腐敗問題に何らかの形で対応していることです。 (注:私はMVCを使って実際のアプリケーションを実装していません - デモアプリケーションはわずか4〜5つです。この2冊の本を読んでいるところですが、IoCコンテナの主題によってループが起こりました) – dizzyguy

+0

"Your * SqlProductsRepository "現在のところ、このシングルトンのライフスタイルを持っているので、あなたのアプリケーションが実行されている限り、すべての要求を共有する限り、単一のLINQをSQL * DataContext *に維持しています。それはうまくいくかもしれません...すべてのデータアクセスは読み取り専用ですが、データの編集を開始すると問題が発生するためです。コミットされていない変更は要求を越えて漏れ始めるでしょう」 - Pro ASP.NET MVC Framework、P. 101 – dizzyguy

+0

コントローラまたはサービスでデータコンテキストのインスタンスをインスタンス化し、そのトランザクションのリポジトリまたはリポジトリに "注入"する場合。その後、コミットをコールし、データコンテキストのisntanceを "大丈夫"にする必要はありません。アプリケーションのライフサイクルからdatacontextを開いたままにすることはありません。トランザクションの範囲外ではありません。私はそれを行う安全な方法であることが分かった。 –

関連する問題