Ist es möglich, mithilfe einer benutzerdefinierten Factory-Methode den übergeordneten Typ des Auflösungstyps in Unity zu ermitteln. Ich versuche, einen Logger zu erstellen, der bereits einen Kontext für das übergeordnete Objekt hat.Erstellen eines Objekts aus benutzerdefinierter InjectionFactory in Unity
// ... other types being registered
container.RegisterType<ILogger>(new InjectionFactory(ResolveLogger));
// Custom factory method
private ILogger ResolveLogger(IUnityContainer container)
{
// I want to know the type of the parent that requires the ILogger interface so that I can add it to my logging context (with Serilog):
Type parentType = ???
return Log.Logger.ForContext(parentType);
}
Wenn ich eine Instanz einer Klasse zu erstellen, ermöglicht Serilog mich auf diese Weise einen Kontext für den Logger zu setzen:
public class MyService
{
private readonly ILogger logger;
public MyService(ILogger logger)
{
this.logger = logger.ForContext(this.GetType());
}
}
Danach werden alle Anrufe zu this.logger.Information("Hello World")
werden zusätzliche Metadaten Der Aufruf wurde in der MyService-Klasse ausgeführt.
Ich versuchte zu vermeiden zu müssen, logger.ForContext(this.GetType())
in jeder Klasse, die einen Logger verbraucht, zu rufen, indem Unity die Arbeit für mich erledigen lässt.
Könnten Sie versuchen zu erklären, was Sie Ziel Ziel ist. Vielleicht gibt es eine bessere Lösung. – Michael
Ich habe die Frage mit meinem spezifischen Ziel aktualisiert. –
Nicht sicher, dass Unity diese Informationen bereitstellt. Sie könnten versuchen, einige benutzerdefinierte Resolver oder benutzerdefinierte Richtlinien oder benutzerdefinierte Buildup zu untersuchen. Aber ich denke Log4Net macht was du willst .. – Michael