プリズム3-モジュールのロードソースの解釈

入門

ソフトウェア開発プロセスにおいて、合計コンポーネント状の開発、コンポーネント間の相互作用好ましくは、独立したテスト。モジュールのPrismは、これを満たします。

このアーキテクチャ図は非常によく概念モジュールのプリズムを説明します

コンフィギュレーションファイル、フォルダ、モジュールの手動ロードされた方法、およびモジュールのロードを確認するため、および依存関係の検証を含むサイクルを繰り返し経て、プリズムのサポート

プリズムためのロード・モジュール

それのソースで直接見て

0、モジュールがロードされました

  • モジュールは、主にモジュールを発見するためにModuleCatalogを頼るロード
  • ModuleManagerによってロードモジュール、モジュールとモジュールのロード順序を保証するために検証するために、
  • ようにロードされたクラスのUI要素を表示してしなければならないモジュールを含むモジュールを、初期化する責任ModuleInitializer。

初期化メソッドを呼び出しPrism.PrismApplicationBase

1585574598775

ディレクトリを作成します

1585574672183

容器にRegisterRequiredTypes注入法ModuleManagerによって、ModuleInitializer、

1585574816406

最後の呼び出しInitializeModules方法、およびModuleManagerによってのRunメソッドを呼び出します

1585574852698

理解するために、2人の名前を見て、最初の発見モジュールおよび検証モジュールである、第2のモジュールはロードされ、初期化されます。

1585574917778

初期化メソッドModuleCatalogBaseルック、そして案の定

1585574973443

1585574987953

検証はもっと面白いです

1585575114834

再現性の検証

1585571571246

モジュール名のないモジュールによって、あなたが例外をスローする場合という、あまりにもそこにロードされているかどうかを判断します

ロード・シーケンス・検証

1585572866324

ModuleBaseで同じ時間を見てで

1585575240730

項目の変更が検証されますたび

1585575308583

1585575327939

LoadModulesWhenAvailableのルックModuleManage検証方法の上にいることを発見

1585575416018

1585575456472

1585575508444

1585575521164

最終ModuleInitializerはモジュールを初期化するために使用を参照してください。LINQは、処理遅延ローディング技術により達成しました。

1585575588013

我々は、この方法がIModleインターフェイスモジュールを実装しなければならないことがわかりました。そして、ここRegisterTypesとOnInitializedメソッドを呼び出します。

モジュールがロードされて読んだ後、次の例を見て

1、のAppSettingによってロード

プロフィールを見てください

1585575781099

初期化時

1585575803440

書き換えCreateModuleCatalogを参照してください、ModuleCatalog制御モジュールは、発見と検証である以前に導入されています。

1585575869468

1585575909447

1585575962111

セクション名は、モジュールでなければなりませんを参照してください。

パースへの依存ロジックをモジュール、そして最終的にはAddModuleメソッドを呼び出します

1585577943221

負荷の関連するUIElement再びModuleAModule。

図2に示すように、スルーコードローディング

もっと簡単なコードをロードすることにより、ModuleCatalogは直接関係モジュールConfigureModuleCatalogのアプローチにそれをロードし、デフォルトを呼び出します。

1585578152349

ModuleAModule内のコード変わらず

説明で明確に説明し、いないされています。このロジック0。

カタログ負荷によって3、

あなたはModuleCatalog、それが作成されたincomingディレクトリのアドレスを作成し、ソースがどのように設計することが表示されていない場合は、ディレクトリをロードすることによって。対応するディレクトリInnerLoad法の内部で発見して、アセンブリを横断することにより、クラスが実装するインタフェースはIModuleを見つけ、それがクラスをロードします。

ソースもまさにそれを見て

1585578439577

1585578580233

公式のソースコードは、データの分離とセキュリティを確保するために、アセンブリをロードするAppDoaminの作成など多くの問題を発見考慮読み取ります。そして、さえアセンブリを反映するためにクラスを作成するにはInnerModuleInfoLoader

1585578854546

このような非難の分布は非常に良いですが、私たちも、ネットワーク上でModuleCatalogクラスをロードするためにモジュールを書くことができます。

図4に示すように、手動で装填

1585579279370

ConfigureModuleCatalogモジュール内のすべての最初には、中にロードされ、InitializationModeをオンデマンドで提供されています

1585579366391

その後、必要なときにモジュールのLoadModuleが積載方法の前にロードされて使用することができます

1585579427491

1585579463038

これは、アンインストールモジュールのインターフェースを提供しなかった注目すべきです。

概要

モジュールの下でこの1本の紹介原理は、実際には、ロードされました

  • モジュールを発見する責任ModuleCatalog。
  • ModuleManagerによってロードモジュール、モジュールとモジュールのロード順序を保証するために検証するために、
  • ようにロードされたクラスのUI要素を表示してしなければならないモジュールを含むモジュールを、初期化する責任ModuleInitializer。

次のスタートが実現MVVMをご紹介します。

おすすめ

転載: www.cnblogs.com/lovexinyi/p/12601999.html