私はPrism / Unityを使ってWPFアプリを書いています。
私はメインのアプリを持っています(ブートストラップ付き)。
私は私の各モジュール用のインターフェースを持っています。例えば:
MyModuleA 道具 IMyModuleA
マイモジュールB 道具 IMモジュール
疎結合と依存性注入を実装したいです。
そのため、私のブートストラップでは、インターフェイスに基づいてライブラリ(タイプ)をロードするように指定したいと思います。これにより、モジュールを独立して構築できるようになります。
私のブートストラップには、次のものがあります。
protected override void ConfigureModuleCatalog() {
base.ConfigureModuleCatalog();
string path = @"Modules.MyModuleA.dll";
var assembly = Assembly.LoadFrom(path);
var type = assembly.GetType("Modules.MyModuleA.MyModuleA");
ModuleCatalog.AddModule(new ModuleInfo {
ModuleName = type.Name,
ModuleType = type.AssemblyQualifiedName,
Ref = new Uri(path, UriKind.RelativeOrAbsolute).ToString()
});
}
これが最善の方法ですか?
回答:
回答№1は0これが最善の方法ではないことを私は言わなければなりませんなぜならあなたはまだ文字列でタイプを指定しているからです。依存性注入と疎結合は、Interfaceを使用し、そのインターフェイスを実装しているさまざまな型をその場で登録することです。
同じインターフェースに対して異なるモジュールをその場でロードしたい場合は、希望のコードパスで呼び出される独自のBootstraperを使用するべきです。そしてその中で使用します:
if(shouldUseEmail)
Container.RegisterType<IFeedbackService, EmailFeedbackService>();
else
Container.RegisterType<IFeedbackService, SMSFeedbackService>();
そして、後であなたはこのように決心します:
var feedbackService = Container.Resolve<IFeddbackService>();
あるいはDI(コンストラクタへの依存性注入)を使う