Abhängigkeitsinjektion vs. Service-Standort

Ich bin derzeit auf der Abwägung der vor-und Nachteile zwischen DI und SL. Allerdings habe ich mich in den folgenden catch-22, das bedeutet, dass ich sollte nur die Verwendung SL für alles und Spritzen nur ein IoC-container in jeder Klasse.

DI Catch-22:

Einige Abhängigkeiten, wie Log4Net, einfach nicht passen DI. Ich nenne diese meta-Abhängigkeiten und das Gefühl, Sie sollte blickdicht sein zum aufrufenden code. Meine Begründung ist, dass, wenn Sie eine einfache Klasse " D " wurde ursprünglich eingeführt, ohne Anmeldung, und wächst dann zu verlangen, Protokollierung, dann abhängige Klassen 'A', 'B' und 'C' muss jetzt irgendwie erhalten diese Abhängigkeit und übergeben Sie es nach unten von 'A' bis 'D' (vorausgesetzt 'A' komponiert 'B', 'B' komponiert 'C', und so weiter). Wir haben jetzt deutliche änderungen im code, nur weil wir verlangen die Protokollierung in eine Klasse.

Wir benötigen daher eine undurchsichtige Mechanismus für die Erlangung der meta-Abhängigkeiten. Zwei in den Sinn kommen: Singleton und SL. Die ehemalige bekannte Einschränkungen, vor allem im Hinblick auf starre scoping-Fähigkeiten: am besten ein Singleton wird die Verwendung einer Abstrakten Fabrik, die gespeichert ist im Gültigkeitsbereich der Anwendung (ie. in einer statischen Variablen). Dies ermöglicht einige Flexibilität, aber ist nicht perfekt.

Eine bessere Lösung wäre, um zu injizieren, ein IoC-container in solche Klassen, und verwenden Sie dann SL, innerhalb der Klasse zu lösen, diese meta-Abhängigkeiten vom container.

Daher catch-22: denn die Klasse ist jetzt injiziert werden, mit einem IoC-container, dann warum nicht verwenden Sie es zu beheben, alle anderen Abhängigkeiten auch?

Ich würde mich sehr über Eure Gedanken 🙂

InformationsquelleAutor der Frage Lawrence Wagerfield | 2011-02-13

Schreibe einen Kommentar