Unity DI in einem Windows-Dienst, ist möglich?

8

Ich entwickle einen Windows-Dienst, um einige periodische Operationen auszuführen. Kann ich Unity verwenden, um meine Klassen aus einer anderen Bibliothek dort zu injizieren?

Ich möchte mit dem [Dependency] -Attribut für meine Dienste arbeiten, indem ich die Komponenten am Einstiegspunkt des Windows-Dienststarts registriere.

Beispiel:

%Vor%

In diesem Szenario ist die EventBL immer Null und wird daher nicht von der [Dependency] der Einheit aufgelöst. Es gibt keine Möglichkeit, es zum Laufen zu bringen?

Danke!

Lösung gefunden:

Nachdem ich die Antwort geschrieben habe, habe ich eine mögliche Lösung gefunden, die zum Erstellen der Methode des Containers aufgerufen wird, um die Serviceklasse zu erstellen:

%Vor%

Wenn Sie eine andere Lösung kennen, teilen Sie sie bitte mit:)

    
juan25d 05.08.2014, 09:56
quelle

1 Antwort

14

Natürlich können Sie eine DI-Bibliothek verwenden, um Sie bei Windows-Diensten zu unterstützen. Beachten Sie, dass Sie generell die Konstruktorinjektion bevorzugen sollten. Dies verhindert eine zeitliche Kopplung und verhindert, dass Ihr Code eine Abhängigkeit von der DI-Bibliothek selbst hat (was durchaus der Fall ist) ironisch, um eine Abhängigkeit von der DI-Bibliothek zu haben, da sie versucht, eine starke Kopplung zwischen Komponenten zu verhindern).

Darüber hinaus sollten Sie den Container einfach Ihre Dienste auflösen lassen. Mit anderen Worten, machen Sie Ihre Dienste nicht von Hand neu, sondern fordern Sie eine neue Instanz aus dem Container an:

%Vor%

Beachten Sie jedoch, dass Ihr EventChecker einmal aufgelöst und für die Dauer der Anwendung gespeichert wird. Das macht es effektiv zu einem Singleton und damit werden alle seine Abhängigkeiten Singletons. Stattdessen ist es besser, Ihre ServiceBase -Implementierung Teil des Kompositionsstamms zu machen und jedes Mal, wenn Ihre Zeit ausgelöst wird, neue Instanzen aus dem Container aufzulösen:

%Vor%     
Steven 05.08.2014, 10:35
quelle