6

Ich habe vor kurzem eine Mauer getroffen, als ich Ninject in dem Projekt, an dem ich gerade arbeite, gezeigt habe.Statische Abhängigkeitsinjektion Fabrik, richtig oder falsch?

Ich habe alle möglichen Fragen durchgegangen und systematisch Design und Architektur zugunsten der Abhängigkeitsinjektion angefordert.

  1. Is this right to inject the container/kernel to the main application presenter?

  2. How to configure Ninject to use along with NHibernate in WinForms?

  3. Conditional dependency injection binding only when property not null

  4. What did I get wrong, DI or Design, and how should I go about it?

Nach Stunden und Stunden und Stunden von Meer Ich stieß auf den Artikel von Justin Etheredge, der von seiner statischen DIFactory-Klasse spricht.

ich jetzt frage, ist es nicht die Dinge wie Magie arbeiten, um eine statische DI factory?

Ich würde gerne die Vor- und Nachteile einer statischen DI-Fabrik in einer realen Anwendung hören.

Sind IoC und DI auch gleich oder sind sie sehr ähnlich, obwohl einige Unterschiede?

Antwort

7

A static DI Factory is a Service Locator und ein Service Locator is an anti-pattern, weil es macht es schwierig Grund über Ihren Code:

Der einzige Vorteil von Service Locator ist, dass es leichteasier to understand than Dependency Injection ist. Allerdings ist DI nicht so schwer zu verstehen once you get over a few conceptual hurdles.

Die Beziehung zwischen IoC und DI ist das DI is a special case of IoC.

+0

Was passiert, wenn bestimmte Typen beim Start der Anwendung nicht instanziiert werden können, weil sie Benutzeranmeldeinformationen benötigen, um korrekt zu instanziieren? Zum Beispiel ist die 'NHibernante.ISessionFactory' ein solches Problem, da sie ohne eine korrekte Verbindungszeichenfolge nicht instanziiert werden kann, und wenn sie erst einmal erstellt wird, wird es ihre Verbindungszeichenfolge nicht ändern lassen. Als Workaround kann man eine 'IDbConnection' liefern und verliert den Cache der zweiten Ebene, der Spuren eines Objekts während des 'ISession'-Lebenszyklus enthält. Dann müsste der Benutzer seine Anmeldeinformationen angeben, und jetzt ist die "ISessionFactory" -Abhängigkeit kein Problem mehr. –

+0

Wäre es eine 'AbstractFactory', die es ermöglicht neue Typen zu registrieren? Wie würdest du das machen? –

+1

Wenn Sie ein Unterdiagramm zur Laufzeit nicht auflösen können, können Sie jederzeit eine weitere Indirektionsebene hinzufügen. Eine abstrakte Fabrik wäre eine Option. Hier finden Sie weitere Informationen zu [Abstract Factory implementieren] (http://blog.ploeh.dk/2012/03/15/ImplementinganAbstractFactory). –

Verwandte Themen