Возможно ли, используя собственный заводский метод, получить родительский элемент разрешения в Unity. Я пытаюсь создать регистратор, который имеет некоторый контекст, применяемый к нему уже относительно его родительского объекта.Получить в настоящее время объект здания из пользовательского InjectionFactory в 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);
}
Когда я создаю экземпляр класса, Serilog позволяет мне установить контекст для регистратора в этой манере:
public class MyService
{
private readonly ILogger logger;
public MyService(ILogger logger)
{
this.logger = logger.ForContext(this.GetType());
}
}
После этого, все вызовы к this.logger.Information("Hello World")
будет включать в себя дополнительные метаданные показ вызова был выполнен в классе MyService.
Я старался не задумываться о том, чтобы позвонить logger.ForContext(this.GetType())
в каждом классе, который потребляет логгер, если Unity сделает для меня работу.
Не могли бы вы попытаться объяснить, чем вы являетесь конечной целью. Может быть, есть лучшее решение. – Michael
Я уточнил вопрос с моей конкретной целью. –
Не уверен, что Unity предоставляет эту информацию. Вы можете попытаться изучить некоторые настраиваемые методы распознавания или пользовательские политики или настраиваемое наращивание. Но я думаю, что Log4Net делает то, что вы хотите. – Michael