2009-08-02 14 views
2

Ich bin ein Anfänger mit Burg Windsor; und irgendwie mit Apress Pro Mvc Buch eingeführt. In dem Projekt, an dem ich arbeite; Ich benutze Castlewindsor Controller Factory anstelle von MVC Controller Factory; also kann ich parametrisierte Konstruktoren haben und ich kann die Abhängigkeiten injizieren. Gibt es eine Möglichkeit, der Windsorcontroller-Factory mitzuteilen, dass sie die Werte in die Eigenschaften der Controller-Klasse eingibt, ohne den Konstruktor zu durchlaufen? Der Grund, warum ich dies tun möchte, ist, weil ich Logging-Abhängigkeit habe; Emailler Abhängigkeit; Datenbankabhängigkeit; Theme-Engine-Abhängigkeit; und ich möchte nicht diesen Parameter viele Parameter im Konstruktor verwenden.CastleWindsor füllt die Klassenfelder auch

Antwort

2

Wenn Windsor eine Service-Implementierung auflöst, werden standardmäßig alle Eigenschaften mit öffentlichen Settors gefüllt, die er erfüllen kann.

Beachten Sie jedoch, dass es manchmal Sinn macht, die Abhängigkeit im Konstruktor aufzulösen, denn sie garantiert, dass jede Instanz immer in einem gültigen Zustand ist. Stellen Sie sich das Unit-Testing-Szenario vor, in dem die Person, die den Test schreibt, verrückt wird über die Notwendigkeit zu wissen, welche Abhängigkeiten geliefert werden sollten. Wenn alle Abhängigkeiten in den c'tor gehen, wird der Tester keine andere Wahl haben, als die getestete Instanz mit allen erforderlichen Abhängigkeiten zu versorgen (als Stubs oder Mocks).

Wie auch immer, wie für Ihre Frage, Windsor Unterstützung C'tor und Eigenschaft Injektion von Standard

+0

und wenn es die Eigenschaften nicht füllt, aber der Konstruktor; Wo soll ich hinschauen? – user149383

+0

Ich würde sagen - poste deinen Code in Windsors Benutzergruppe. Sie werden wahrscheinlich schnell eine schnelle Hilfe bekommen –

1

Schloss Windsor automatisch alle Objekte mit öffentlichen Setter füllen, die es weiß, wie zu füllen.

Das bedeutet, wenn Sie eine Klasse

public MyClass { 
    public SomeDependency {get; set;} 
} 

haben, solange der Behälter zu wissen, so konfiguriert ist, wie SomeDependency zu lösen es versuchen wird, um es zu lösen und zu injizieren.

Manchmal habe ich dieses Standardverhalten als lästig empfunden. This facility gibt Ihnen feinere Kontrolle über den Prozess.