2016-04-27 5 views
2

In Einfacher Injector documentation Satz lautet: „Eine neue Instanz des Diensttypen wird für jede Anfrage (beide für Anrufe in GetInstance und Instanzen als Teil eines Objektgraphen) erstellt werden.“.Einfache Injector Terminologie klären

Ich bin ein bisschen verwirrt, welche Anfrage bedeutet? - Ist es Anfrage wie http Anfrage oder es ist Anfrage Service (Instanz) aus Container zu lösen?

In Teil singleton ist Ausdruck Lebensdauer; Lebensdauer wird definiert durch container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();?

+0

Ich stimme zu. Die Verwendung von "Anfrage" ist verwirrend. Im Kontext dieses Absatzes bedeutet "Anfrage" "jemand, der eine Instanz aus dem Container anfordert". Also fordern Sie eine Insurance mit GetInstance an und Sie können eine Instanz mit einem Konstruktorparameter anfordern. – Steven

Antwort

2

Standardmäßig wird Transient verwendet, was bedeutet, dass bei jeder Anforderung des Typs eine neue Instanz erstellt wird.

Sie können auch Web Request verwenden, wenn Sie die Instanz für die gesamte Webanforderung erneut verwenden möchten.

http://simpleinjector.readthedocs.org/en/latest/lifetimes.html#perwebrequest

+0

Vielen Dank für die Antwort, aber ich bin immer noch verwirrt; Lassen Sie mich Sie zu Singleton fragen: Wenn ich die Lebensdauer von Webanfragen verwende, wird die Singleton-Instanz nur für einen Benutzer und nur für einen Benutzer erstellt oder ist Singleton für alle Benutzeranfragen freigegeben. Singleton ist noch aktiv, bis ich IIS neu starte? Um es klar zu sagen, mein Anwendungsfall ist Unit of Work Manager erstellen, aber dieser Manager muss nur eine pro Anfrage sein und keine Anfragen teilen ... –

+0

'Singleton' erstellt nur eine Instanz pro Laufzeit der Anwendung. So bekommen alle die gleiche Instanz. Eine neue Instanz wird nur erstellt, wenn das Appool wiederverwendet wird oder die Website neu gestartet wird. – Hypnobrew

+0

Ich habe getestet was du sagst, aber du liegst falsch. Der SI-Container mit 'WebRequestLifestyle' gibt standardmäßig eine neue Instanz bei jeder Anfrage für einen Service aus dem Container zurück. Wenn Sie dieselbe Instanz verwenden möchten, müssen Sie 'Lifestyle.Scoped' angeben. Wie auch immer, danke für deine Antworten, du hilfst mir definitiv, Simple Injector besser zu verstehen! –