/ / WPF mit Unity-Lademodulen basierend auf der Schnittstelle - WPF, Unity-Container, Prisma

WPF w / Unity Laden Module basierend auf Schnittstelle - WPF, Einheit-Container, Prisma

Ich schreibe eine WPF-App mit Prism / Unity.

Ich habe meine Haupt-App (mit einem Bootstrapper).

Ich habe Schnittstellen für jedes meiner Module. Zum Beispiel:

MyModuleA implementiert IMyModuleA

MyModuleB implementiert IMyModuleB

Ich möchte lose Kopplung und Abhängigkeitsinjektion implementieren.

Daher möchte ich in meinem Bootstrapper angeben, dass ich eine Bibliothek (einen Typ) basierend auf einer Schnittstelle lade. Dies würde mir erlauben, das Modul unabhängig voneinander zu erstellen.

In meinem Bootstrapper habe ich Folgendes:

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()
});
}

Ist das der beste Weg?

Antworten:

0 für die Antwort № 1

Ich muss sagen, dass dies nicht der beste Weg ist, dies zu tunweil Sie immer noch den Typ für Zeichenfolge angeben, was noch schlimmer ist, weil Platz für menschliches Versagen bleibt. Bei der Abhängigkeitsinjektion und loser Kopplung geht es darum, die Schnittstelle zu verwenden und verschiedene Typen zu registrieren, die diese Schnittstelle spontan implementieren.

Wenn Sie verschiedene Module für dieselbe Schnittstelle im Handumdrehen laden möchten, sollten Sie Ihren eigenen Bootstraper verwenden, der unter dem gewünschten Codepfad aufgerufen wird. Und darin verwenden:

if(shouldUseEmail)
Container.RegisterType<IFeedbackService, EmailFeedbackService>();
else
Container.RegisterType<IFeedbackService, SMSFeedbackService>();

Und später lösen Sie sich so:

var feedbackService = Container.Resolve<IFeddbackService>();

Oder verwenden Sie DI (Abhängigkeitsinjektion in Konstruktoren)