[Architect]ABP(現代ASP.NETテンプレート開発フレームワーク)(3)モジュールシステム
3245 ワード
このセクションのディレクトリ
モジュールの紹介
ABPはインフラストラクチャを提供してアプリケーションを作成させます.modulesを作成し、組み合わせて使用します.
1つのmoduleは他のmoduleに依存することができ、通常1つのプログラムセットは1つのmoduleとすることができる.
1つのmoduleは、1つの継承AppModuleによって定義.
異なるアプリケーションで使用するブログmoduleを開発することができます.
最も簡単な定義は次のとおりです.
public class MyBlogApplicationModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
}
}
ABPはすべてのプログラムセットをスキャンし、AppModuleを継承するすべてのクラスを見つけ、各プログラムセットに1つのModuleを定義することを提案する.
ライフサイクルイベント
ABPはアプリケーションの起動と終了時にmodulesの特定のメソッドを呼び出す.これらの方法を書き直して、特定のタスクを実行することができます.
ABPは依存順にこれらのメソッドを呼び出します.module Aがmodule Bに依存している場合、メソッドの実行順序は次のとおりです.
PreInitialize-B, PreInitialize-A, Initialize-B, Initialize-A, PostInitialize-B and PostInitialize-A
Shutdownメソッドは逆の順序である.
PreInitialize
この方法はプログラムの起動時に呼び出され、依存注入登録の前に実行する.ここでは、IoCコンテナにクラスやイベントを登録することができる.
Initialize
この方法はdependency injectionに登録する場所である.通常、IocManagerが呼び出されます.RegisterAssemblyByConventionメソッド依存登録をカスタマイズする場合は、関連ドキュメントを表示できます.
PostInitialize
この方法は起動時の最後に呼び出され、ここでは容器解析オブジェクトを安全に使用することができる.
Shutdown
この方法は、オフを適用するときに調整されます.
モジュール依存
1つのmoduleは他のmoduleに依存することができ、ABPはこれらの依存を自動的に解析する.
[DependsOn(typeof(MyBlogCoreModule))]
public class MyBlogApplicationModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
}
}
私たちの定義のため、core moduleはアプリケーションmoduleの前に初期化されます.
カスタムモジュールメソッド
モジュールは、MyModule 2がMyModule 1に依存する場合、MyModule 2がPreInitメソッドでMyModule 1を呼び出すメソッドを希望する他のモジュールに対してカスタムメソッドを提供することもできる.
public class MyModule1 : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
}
public void MyModuleMethod1()
{
//this is a custom method of this module
}
}
[DependsOn(typeof(MyModule1))]
public class MyModule2 : AbpModule
{
private readonly MyModule1 _myModule1;
public MyModule2(MyModule1 myModule1)
{
_myModule1 = myModule1;
}
public override void PreInitialize()
{
_myModule1.MyModuleMethod1(); //Call MyModule1's method
}
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
}
}
ここでは、コンストラクション関数の注入によりMyModule 1を注入するので、MyModule 2はその方法を呼び出すことができる.