1

私はこのブログの例を使用しています:

http://blog.longle.net/2012/03/29/building-a-composite-mvc3-application-with-pluggable-areas/

私は自分のソリューションで機能する概念を持っています。ただし、ユーザーがモジュール/領域にアクセスする権限を持っている場合にのみ、バインディングをカーネルに追加する良い方法を見つけようとしています。

ServiceLocator についていくつか読んだことがありますが、それを避けようとしていました。

物事を機能させるために私が試みていることの 1 つは、モジュールの既定のコンストラクターでのユーザー コンストラクターの挿入です。それは機能していますが、ハックです。

私が使用しているパターンでは、AreaRegistion から継承するクラスを作成する各モジュール プロジェクトです。各モジュール プロジェクトがビルドされると、関連ファイルがメイン Web プロジェクトの Areas フォルダーにコピーされます。その後、メイン プロジェクトが読み込まれると、リフレクションを使用してすべてのモジュール アセンブリが読み込まれます。次に、AreaRegistration.RegisterAllAreas() が呼び出されると、AreaRegistration を継承するクラスを持つすべてのモジュールを検出してロードします。

Ninject カーネルにアクセスし、AreaRegistration から継承するモジュール クラスにバインドを追加する良い方法を見つけたいと思います。RegisterArea() オーバーライドからバインディングを追加するコードを開始することを想像します。

ServiceLocator に頼らずにこれを行う方法についての提案を探しています。

どんなアイデアでも大歓迎です。

4

1 に答える 1

0

今のところ、より良い解決策を見つけました。それは NinjectModule を使用することです。Plugin クラスでは、NinjectModule を継承するクラスを作成します。次に、Load オーバーロードでプラグ バインディングをセットアップします。

次に、メイン アプリのブートストラップで Kernel.Load を使用して、NinjectModule から継承するすべてのプラグイン クラスで Load オーバーロードを初期化します。

于 2015-01-02T02:25:07.150 に答える