Ich habe in mehreren Quellen gelesen, darunter in Mark Seemanns 'Ploeh'-Blog, wie die richtige Platzierung des Kompositionsstamms eines IoC-Containers so nah wie möglich am Einstiegspunkt einer Anwendung liegt.
In der .NET-Welt werden diese Anwendungen häufig als Webprojekte, WPF-Projekte, Konsolenanwendungen und Dinge mit einer typischen Benutzeroberfläche (sprich: keine Bibliotheksprojekte) angesehen.
Verstößt es wirklich gegen diesen weisen Rat, die Kompositionswurzel am Einstiegspunkt eines Bibliotheksprojekts zu platzieren, wenn sie den logischen Einstiegspunkt einer Gruppe von Bibliotheksprojekten darstellt, und der Kunde einer Projektgruppe wie dieser ist die Arbeit eines anderen , dessen Autor das Kompositionsstammverzeichnis nicht zu seinem Projekt hinzufügen kann oder will (sogar ein UI-Projekt oder ein weiteres Bibliotheksprojekt)?
Ich bin mit Ninject als IoC-Container-Implementierung vertraut, aber ich stelle mir vor, dass viele andere auf die gleiche Weise arbeiten, indem sie nach einem Modul suchen können, das alle erforderlichen Bindungskonfigurationen enthält. Dies bedeutet, dass ich ein Bindungsmodul in ein eigenes Bibliotheksprojekt einfügen könnte, um es mit der Ausgabe meines Hauptbibliotheksprojekts zu kompilieren. Wenn der Client die Konfiguration ändern wollte (in meinem Fall ein unwahrscheinliches Szenario), könnte er eine Ersatz-DLL einfügen, um die zu ersetzen Bibliothek mit dem Bindungsmodul.
Dies scheint zu vermeiden, dass die häufigsten Clients überhaupt mit Abhängigkeitsinjektion und Kompositionswurzeln zu tun haben, und würde die sauberste API für die Bibliotheksprojektgruppe ergeben.
Dies scheint jedoch angesichts der konventionellen Weisheit in dieser Frage zu fliegen. Ist es nur so, dass die meisten Ratschläge davon ausgehen, dass der Entwickler auch eine gewisse Koordination mit der Entwicklung der UI-Projekte hat, und nicht mein Fall, in dem ich nur Bibliotheken entwickle, die andere verwenden können?