Рассмотрим, что у нас есть несколько сервисов, каждый из которых использует интерфейс ILoggerFactory, создающий собственный экземпляр регистратора следующим образом:
public class Foo
{
private readonly ILogger _logger;
public Foo(ILoggerFactory logger)
{
_logger = loggerFactory.CreateForContext(this.GetType());
}
}
Также учтите, что мы используем Виндзорский замок для внедрения зависимостей, поэтому у нас есть такая регистрация:
container.Register(Component
.For<ILoggerFactory>()
.LifestyleSingleton()
.Instance(new LoggerFactory());
Конечно, мы не хотим повторять CreateForContext () в каждом классе.
Итак, я пытаюсь написать что-то вроде этого:
container.Register(Component
.For<ILogger>()
.LifestyleTransient()
.UsingFactoryMethod((kernel,model,context) =>
kernel.Resolve<ILoggerFactory>().CreateForContext(????));
+
public class Foo
{
private readonly ILogger _logger;
public Foo(ILogger logger)
{
_logger = logger;
}
}
Но есть проблема - я не могу найти, как получить тип владельца зависимости.
Есть ли способ получить это или другой способ сделать то же самое?
Обновление
Я реализовал ISubDependencyResolver, но он не работает с компонентами с поздней привязкой. Так что, если вы используете много регистраций, например, через UsingFactoryMethod, это не очень хорошее решение.