Castle Windsor seltsames Verhalten mit Property-Injektion und Factory-Methode

8

Ich verwende Castle Windsor 2.5.1 in einem ASP.NET MVC-Projekt und benutze Property-Injection, um ein Objekt zu erstellen, von dem ich erwarte, dass es immer auf einer Basis-Controller-Klasse verfügbar ist. Ich benutze eine Fabrik, um dieses Objekt zu erstellen, aber wenn es einen Fehler im Konstruktor gibt, bekomme ich keine Warnung von Windsor und es gibt nur mein Objekt zurück, ohne die Eigenschaft zu injizieren.

Ist dies das erwartete Verhalten, und wenn ja, wie bekomme ich einen Fehler, wenn eine Factory nichts zurückgibt?

Hier ist ein Beispiel

%Vor%

Eine interessante Beobachtung, wenn ich dies in meiner MVC-Anwendung verwende, erhalte ich einen internen Fehler von Windsor, wenn ich ReleaseComponent aufruft - also, obwohl es mir keine Klasse mit meiner injizierten Abhängigkeit zurückgegeben hat, scheint es immer noch zu sein versuche es zu lösen.

    
amarsuperstar 09.12.2010, 12:17
quelle

3 Antworten

5

Soweit ich weiß, ja, das ist das beabsichtigte Verhalten. Dies ist nicht spezifisch für Factory-Methoden, es funktioniert wie für alle optionalen Service-Abhängigkeiten. Optionale Abhängigkeiten, die beim Auflösen ausgelöst werden, werden als nicht auflösbar behandelt. Dies ist in DefaultComponentActivator.ObtainPropertyValue ()

Natürlich können Sie den Standardaktivator immer mit Ihrem eigenen überschreiben, wenn Sie dieses Verhalten ändern möchten.

    
Mauricio Scheffer 09.12.2010, 17:34
quelle
5

Neben der von Mauricio vorgeschlagenen Option ist es auch möglich, eine Einrichtung zu erstellen, um das erwartete Verhalten zu erreichen, wie auf diese Beispielseite zu Einrichtungen.

Hier ist meine Implementierung, die etwas prägnanter ist:

%Vor%

Dann dekorieren Sie einfach alle Eigenschaften mit [NonOptional] und Sie erhalten einen Fehler, wenn es ein Problem mit der Konstruktion gibt.

    
amarsuperstar 10.12.2010 15:15
quelle
0

Wie von Schloss Windsor 3.2 gibt es neue coole Ergänzung, die Diagnose ist die Anmeldung der Behälter .

Also, wenn Sie dies tun, zum Beispiel in einem ASP.NET MVC-App:

%Vor%

Sie können die Protokolle von Windsor zu allen konfigurierten log4net Logger gefangen umleiten.

Die Art der aktuell protokollierten Informationen umfasst:

  • Wenn Windsor versucht, eine optionale Abhängigkeit (wie Eigenschaft Injektion) zu lösen, aber nicht durch Bei einer Ausnahme wird die Ausnahme protokolliert.
  • Wenn Sie eine Art von Konvention Registrierung und es aufgrund einer bestehenden Registrierung für diesen Typ zu ignorieren, wird diese Tatsache protokolliert.
Leniel Macaferi 08.01.2014 21:47
quelle