2015-12-10 8 views
6

Nehmen wir an, wir haben eine sehr einfache IConfiguration Schnittstelle, die verantwortlich fürIoC-Container-Zuordnungen: Singleton vs jeder Anruf Schaffung

interface IConfiguration 
{ 
    string ConnectionString {get;} 
} 

eine richtige Verbindungszeichenfolge zurückkehrt und lässt nur eine Instanz des Typs annehmen, die eine solche Schnittstelle implementiert kann verwendet werden (weil es nur einen String zurückgibt, einen Zustand nicht verwaltet usw.)

Es gibt also mindestens zwei Möglichkeiten, wie die Schnittstelle in einem Container registriert werden kann: wie üblich - jedes neue Objekt Typ anforderend oder als Singleton - ein Objekt für alle Typanfragen. Gibt es Unterschiede zwischen den Ansätzen (vielleicht aus Gründen der Performance, Lebensdauer-Management-Tricks etc.)

container.For<IConfiguration>().Use<ConfigurationImpl>(); 

vs

container.For<IConfiguration>().Singleton().Use<ConfigurationImpl>(); 

Antwort

4

Objekt Lebensdauer Management DI-Container mit Furunkel in der Regel nach unten zu:

  1. Singleton-Bereich (manchmal Container-Bereich)
  2. Transient (pro Anfrage aus dem Container)
  3. Per Graph (Kontext) (Beispiel: Moderator/Controller in Desktop-Anwendungen, Session in Webanwendungen/Web-Server) Es wird besonderes Kapitel gewidmet Objektlebensdauerverwaltung

ich fordere Dich Dependency Injection in .Net. Mark Seemanns ausgezeichnetes Buch zu lesen .

Im Allgemeinen sind Sie Thread-sicher mit Transienten und Singleton ist gut für Leistungsgründe oder Statusfreigabe. Sie müssen auch sorgfältig notieren, wie Ihre Ressourcen entsorgt werden.

Wenn Sie ein Framework haben, bedeutet dies, dass Sie Teile dieses Frameworks als Kontext für die Lebensdauer der Instanz verwenden können.

Beispiel: Sie haben 2 dbcommands, die von asp mvc controller verwendet werden, so dass Sie dbsession zwischen ihnen teilen können, indem Sie dbsession lifetime an die Controller-Lebensdauer binden.

Es gibt mehrere Möglichkeiten, die Objektlebensdauer zu verwalten - wie Pooled, Lazy Loaded oder Futures, aber sie werden weniger verwendet als die ersten 3. Lesen Sie dazu Mark Seemann.