Icontainer beheben
-
25-09-2019 - |
Frage
Was ist die empfohlene Methode, um den AutoFAC -Container in einer Klasse in der Anwendung aus zu erhalten? Sorgt AutoFAC für die Lösung einer Icontainer -Eigenschaft in einer Klasse oder muss ich den Container global speichern, sobald ich ihn erstellt habe?
Lösung
Du brauchst IComponentContext
oder ILifetimeScope
für die meisten Zwecke. Diese werden automatisch von AutoFAC bereitgestellt.
Beide Schnittstellen liefern den Standard Resolve()
Operationen während ILifetimeScope
erweitert IComponentContext
Durch Hinzufügen von Methoden zum Starten neuer verschachtelter Lebensdauer.
Komponenten, die die Dienste des Containers nutzen möchten, um auf andere Komponenten zuzugreifen, müssen dies in ihrem eigenen Bereich und nicht in der „globalen“ Tätigkeit tun, und nicht im „Globalen“. IContainer
, damit die richtige Instanz zurückgegeben werden kann. ZB in einer HTTP -Anforderung, die injizierte IComponentContext
oder ILifetimeScope
wird derjenige für die aktuelle Anfrage sein.
Die meisten Probleme, die einen injizierten Kontext erfordern, können auch (oft eleganter) mithilfe von Beziehungstypen überwunden werden - siehe: http://autofac.readthedocs.org/en/latest/resolve/relationships.html.