データベースに保存されている外部アセンブリに基づいて MVC アプリケーションを動的に拡張する方法が MVC 4 に存在するかどうかを尋ねたいと思います。
前提条件
- 各外部アセンブリは、メイン コア アセンブリを参照していました。
- 各コントローラは、コア プロジェクトからデータベース コンテキストにアクセスできるようにし、コアに関連する基本機能の機会を提供するベース コントローラを継承します。
- コントローラ名はエリア内で一意です - コアとプラグインを一緒に
- 領域はコア アプリケーションで定義されます
- プラグインは、参照されるコア アセンブリのみに依存します。
希望のシナリオ:
起動時に、アプリケーションは指定されたソースからすべてのアセンブリをロードします。それらが既に bin フォルダーに存在し、メイン アプリケーションでまだ参照されていないと仮定しましょう。
ロードされたアセンブリに関する情報を、リフレクターを介して情報オブジェクトのコレクションに保存し、何らかのサービスを介して登録します。そこから、呼び出しキー (コントローラー名とアクション名) を介して呼び出し可能な外部コントローラー、またはコアアセンブリでそれらを表示/アクセス可能にするその他のメカニズムになります。 . Info オブジェクトには、コントローラーへの型参照、コントローラー名、およびアクションのコレクションが含まれます。
コントローラー アクションの呼び出し時 - ルート フィルターまたはサービスは、コントローラーとアクションがコア アセンブリ/プラグイン情報のコレクションに存在するかどうかを検索します。
コントローラーをインスタンス化する / アクションを呼び出してパラメーターを渡す、コア レイアウトを使用して外部ビューをレンダリングする、またはエラー コントローラーにリダイレクトして例外を処理する
win32 フォームでは、アクティベーターとリフレクターを介してこのシナリオを実現できます。プラグインを更新したい場合は、データベースの Dll を置き換えて IIS を再起動するだけです。
主な目標は、コア アプリケーションをサーバーに変更または再デプロイすることなくプラグインを開発できるようにし、新しいプラグインをデータベース / bin フォルダーにアップロードするだけで機能させることです。このアプローチは MVC 4 で実現可能ですか、それとも MVC アプリケーションのすべてが強い型付けと強い参照が必要ですか?
はいの場合、起動前に参照せずにコアアプリケーションに外部コントローラーをロードして呼び出し可能な単純な例について知っていますか?