1

私は DotNetNuke モジュールでレガシー コードに取り組んでおり、テスト フレームワークの下でクラスと動作を取得しようとしています。この機会に、「レガシー コードを効果的に使用する」という本からのアドバイスに従っています。徹底的にテストしてからサービスに変換できる領域を定義しようとしています。次に、IoC フレームワークを使用して動作させたいと思います。今のところ、Ninject に注目しています。

しかし、私は設計上の問題にぶつかっています。私は DotNetNuke モジュールにいるので、アプリケーション全体の構造を実際に変更することはできません。たとえば、NinjectHttpApplication からアプリケーションを派生させることはできません。SOからのこれらの提案も使用できません。モジュールがセットアップして使用する静的クラスにカーネルを配置することを考えていましたが、私が読んだことから、それは非常に悪い考えです。

そのため、最初から IoC をサポートするように設定されていないアプリケーションで IoC を使用できるかどうかを自問し始めています。リクエストごとに依存関係ツリー全体をロードする必要がある場合、レガシー コードをローカルで書き換えて IoC の恩恵を受けるにはどうすればよいですか? 非常にローカルな書き換えから IoC の使用が拡大するパターンはありますか?

私は DotNetNuke を使用していますが、独立したフレームワークにインストールできるスタンドアロン コンポーネントには、同じ疑問が生じます。また、特に Ninject をターゲットにしているわけではありません。この場合、別の IoC フレームワークが役立つ場合は、検討したいと思います。

4

1 に答える 1

2

私の経験からすると、DotNetNuke のコンテキスト内でこの種の抽象化を行う最善の方法は、WebFormsMVP フレームワークを使用することです。これは、DNN モジュールで単体テストを実行するために私が見つけた唯一の正気な方法です。メモリが機能する場合、1 年ほど前に Ninject を配線するのにしばらく費やしました。

ただし、これはまだ WebForms であり、決して単純なものではないことに注意してください。また、既存のコード ベースを知らなければ、移行がどれほど簡単かを知るのは難しいでしょう。

GitHub には、参照用にチェックできるリソースがいくつかあります。

1 つ目は、確実な出発点として機能するモジュール テンプレートです。

https://github.com/irobinson/WebFormsMvp-DNN-Module-Template

2 番目は小さなサンプル プロジェクトです。

https://github.com/irobinson/BeerCollectionMVP

使用している DNN のバージョンによっては、WebFormsMVP に既に同梱されている場合とそうでない場合がありますが、モジュールに依存関係をバンドルするか、妥当であれば DNN の新しいバージョンにアップグレードできるはずです。

于 2012-12-18T16:32:31.597 に答える