Ist es ok, sich zu registrieren-Komponenten in Windsor ohne Angabe einer Schnittstelle?
Ist es schlecht angesehen, Formular zum registrieren der Komponenten in Windsor ohne Angabe einer Schnittstelle? also
container.Register(Component.For<MyClass>().LifeStyle.Transient);
im Gegensatz zu...
container.Register(Component.For<IMyClass>().ImplementedBy<MyClass>().LifeStyle.Transient);
Ich verstehe die Vorteile der Codierung zu einer Schnittstelle und nicht als eine konkrete Umsetzung jedoch finden wir, dass wir jetzt haben viele Schnittstellen, viele von Ihnen sind auf Klassen, die realistisch wird immer nur eine Implementierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es wäre in Ordnung, sich zu registrieren-Komponenten ohne deren Schnittstellen, aber nicht für den Grund, Sie geben.
Konkreten Abhängigkeiten
Kann es passieren, dass Komponenten hängt von konkreten Klassen. Zum Beispiel mit dem Entity Framework sollten die Verbraucher die ObjectContext-Injektion in Ihnen. Das ist eine konkrete Klasse, die noch immer muss gespritzt werden, denn es sollte gemeinsamen zwischen mehreren Verbrauchern.
So, da der Verbraucher Konstruktor wie diese:
müssen Sie konfigurieren Sie die Behälter wie diese:
Den FooRepository Anfragen keine Schnittstelle so macht es keinen Sinn die Registrierung einer Schnittstelle (selbst wenn einer verfügbar war), aber Sie müssen sich noch anmelden, die konkrete Klasse, weil Windsor können nur lösen, Typen explizit registriert.
Schnittstellen mit nur einer Implementierung
Was dann über Schnittstellen mit nur einer Umsetzung? Wieder einmal entscheidet der Verbraucher die Anforderungen.
Vorstellen, dass ein Verbraucher, hat dieser Konstruktor:
Der einzige Weg, Schloss Windsor wird in der Lage sein zu beheben Ploeh ist, wenn Sie sich registrieren IBar. Auch wenn Bar ist die einzige Umsetzung des IBar, , das wird nicht funktionieren:
Diese funktioniert nicht, da IBar nie registriert. Schloss Windsor kümmert sich nicht, dass die Leiste implementiert IBar, weil Sie nicht wollen, um zu versuchen, intelligent zu sein in Ihrem Namen. Sie müssen sagen, es explizit:
Diese Karten IBar zu Bar.
Registrierung beide Schnittstellen und den konkreten Typen
Dann was, wenn Sie wollen in der Lage sein zu lösen, sowohl den konkreten Typ und die Schnittstelle?
Das problem bei dem vorherigen Beispiel ist, dass es lässt Sie beheben IBar, aber nicht Bar.
Können Sie die Forward-Methode, oder multigeneric überlastung der Für die weitergeleitete-Anmeldungen:
Diese können Sie beheben beide Bar und IBar.