Sie können für Anfragen an den Container-Protokollierung hinzufügen, indem Sie ein spezielles Modul Registrierung, die das Preparing
Ereignis für alle Registrierungen fangen:
public class LogRequestsModule : Module
{
protected override void AttachToComponentRegistration(
IComponentRegistry componentRegistry,
IComponentRegistration registration)
{
// Use the event args to log detailed info
registration.Preparing += (sender, args) =>
Console.WriteLine(
"Resolving concrete type {0}",
args.Component.Activator.LimitType);
}
}
Dies ist der einfachste Weg zu gehen und werden Sie wahrscheinlich bekommen, was Sie wollen . Direkt nachdem ein Ereignis Preparing
die Informationen protokolliert, wird die Ausnahme angezeigt und Sie wissen, welche Komponente ausgelöst wurde.
Wenn Sie schicker erhalten möchten, können Sie einige Event-Handler auf dem Behälter ChildLifetimeScopeBeginning
, ResolveOperationBeginning
, ResolveOperationEnding
und CurrentScopeEnding
Ereignisse einrichten.
- Während
ChildLifetimeScopeBeginning
würden Sie brauchen, um etwas einzurichten, um automatisch auf jedes Kind Lebensdauer ResolveOperationBeginning
Ereignisse anhängen.
- Während
ResolveOperationBeginning
würden Sie protokollieren, was gelöst werden soll.
- Während
ResolveOperationEnding
würden Sie alle Ausnahmen melden, die herauskommen.
- Während
CurrentScopeEnding
müssen Sie sich von allen Ereignissen in diesem Bereich abmelden, damit der Garbage Collector den Gültigkeitsbereich der Lebensdauer mit allen Instanzen bereinigen kann.
The Whitebox profiler project has a module, dass einige dieser erweiterten Protokollierung implementiert, aber es ist nicht für die neueste Autofac eingerichtet, so dass Sie es als Ausgangspunkt verwendet werden müßten, kein Ausschneiden/Einfügen Probe.
Noch einmal, die einfachste Lösung ist, dass Modul ich oben gepostet.
Ich weiß, SO runzelt die Stirn auf Dank. Ich schätze jedoch die Bemühungen, die Sie zur Unterstützung von Autofac-Fragen unternommen haben. Antworten sind immer sehr detailliert – GraemeMiller
Nur für weniger Abhängigkeit injiziert, wie ich, das ist, wie Sie dieses Modul registrieren: builder.RegisterModule(); –
Travis danke für die Antwort, Könnten Sie bitte einen Ausschnitt zeigen, wie man den Scope-Namen des aufgelösten Typs protokolliert? –