1

NuGetを使って物を隔離してプラグインするという最近の精神において、MVC3では依存関係リゾルバをどのようにして1つの領域に限定するかについて誰も考えていませんか?ビューとコントローラをある範囲に限定しておくのは簡単ですが、明確なフックが見えない限り、IDependencyResolverを設定するのは避けられないほどグローバルスコープを持つようです。私はそれを1つの領域に限定したいと思います。どのようにMVC3の1つの領域に依存リゾルバを分離するアプローチですか?

提案がありますか?

答えて

2

IDependencyResolverは、グローバル設計です。領域ごとに動作を変えたい場合は、コンテキストオブジェクトに基づいて意思決定を行うことができるさまざまな* Activatorのタイプとインタフェースを調べる必要があります。

特に何をしようとしていますか?

+0

フォーラムをエリアとして実装したとします。これはNinjectを使用します。あなたはまた、ある種のフォトギャラリーをエリアとして実装しています。構造マップを使用します。言い換えれば、フランケンシュタインのサイトをすばやく利用するために、あらゆる種類のオープンソースプロジェクトを利用しています。 –

+1

エリアは事実上ルーティング機能であり、セキュリティ機能や設定機能ではありません。この事実に基づいて、あなたの地域のそれぞれは、孤立したDIを行う独自の方法を提供する必要があります(* Activatorクラスはそのような方法を提供します)。 – marcind

0

あなたがしようとしていることは悪い考えです。依存関係の注入のポイントは、特定の依存関係を特定して、どこから来たのかを気にする必要がないようにすることです。

一部のオブジェクトまたはクラスを特定のMVC領域に制限しようとする場合は、適切なタイミングで適切なものを呼び出すように依存性インジェクタを設定します。

あなたがしようとしていることの詳細は、より良い回答を得るのに役立ちます。

+0

それは全く悪い考えではありません。複数のアプリから作られたサイトをまとめて、それぞれ独自のDIコンテナを使用したい場合、それはまさにあなたが達成したいものです。 –

+0

@Jeff:依存性注入のアイデアは、依存関係解決が1か所で行われることです。たとえば、リゾルバを使用して 'ValidateUserController'を作成し、' EnableUserCommand'に依存するものは 'IMailSender'や' IatanapOfWorkFactory'に依存し、 'IDataMapper'などに依存します。リゾルバは、一度にグラフ化する。既に特定のフレームワークに依存している別のアプリを使用する場合は、それほど選択肢がありません。これらのフレームワークが必要です。いくつかのアプリでうまくいくのは、それらのフレームワークを選択肢のfxにルーティングすることです。 – Steven

+0

私はデザインパターンが何であるか知っています。周囲を見て、私がオープンソースプロジェクトで使っている私の例を見つけるかもしれません。私はあなたが、それぞれ独自の控えめなアーキテクチャを持つ異なるアプリを一緒に暮らしているということについて、私の意見を聞いているとは思っていません。 –

1

これについては、Common Service Locatorを使用することをお勧めします。基本的に各エリアはそれぞれのコンテナのCSLをセットアップできます。

おそらく、依存関係リゾルバとの間にアダプタを作成するか、それをすべて忘れて厳密にCSLを使用する必要があります。

一般に、私はビジネスアプリケーションのラインでCSLを使用することを支持していません。 DI(MassTransitなど)を使用するオープンソースコンポーネントが、ビジネスアプリケーションに簡単に統合できるようにすることが目的です。しかしこれは例外かもしれない。

さらに、mvccontribポータブルエリアを調べます。このタイプのもののために設計されています。

関連する問題