2009-02-20 10 views
11

私は仕事中の大きなプロジェクトの設計思想を持っていますが、わかったと思いますが、a)一般的なアイデアとb)私の提案実装。ASP MVCにコントローラファクトリを追加する

基本的なアイデアは簡単です:コードを再コンパイルせずに、コントローラとビューを追加して将来拡張できるASP MVCアプリケーションを作成したいと思います。 1つのMVCアプリケーションに非常に基本的なフィーチャセットを持たせ、そのアプリケーション固有のコントローラ、データ、ビジネスロジックを含む別の 'Application.dll'を追加することで機能を拡張するというアイデアがあります。

問題は、MVCが同じアセンブリ内の型に対してルーティングを実行するため、ルーティング定義をデータベースに移動しても、MvcHttpHandlerがルーティングできないということですMVCコードを見ると、現在のアセンブリでのみ見えるActivator.CreateInstanceを呼び出すコントローラがロードされていることがわかりました。

私の解決策シンプルですが、おそらく私は何かが欠けている可能性があります:私は、ControllerFactoryを直接(それを行う方法がわからない)置き換えるか、派生クラスでその機能を複製することによって、MvcHttpHandlerをオーバーライドします。新しいコードは要求を読み込み、最初に現在のアセンブリからコントローラをロードし、次に拡張されたコントローラからコントローラをロードしようとします。適切なアセンブリが見つかると、CreateInstanceを使用してそのアセンブリを渡して、必要なコントローラを取得します。

答えて

6

this articleの最後には、独自のControllerFactoryを実装する方法が示されています。基本的には、DefaultControllerFactoryから派生して、global.asaxのApplication_Start()でワイヤリングします。

+0

ありがとう、ベン。それが私が探していたものです。 – Gil

1

コントローラのファクトリの考え方は、後で柔軟性を持たせるだけで何も問題はありません。問題は他のレイヤーに属するコードでコントローラをロードするときに起こります。これが、他のコントローラの柔軟性を「必要とする」理由の1つです。あなたが層を磨き上げていない限り、私は工場のアイデアには何の問題も見ません。

関連する問題