Как получить тип владельца зависимости при использовании контейнера Windsor Castle? - PullRequest
0 голосов
/ 01 ноября 2018

Рассмотрим, что у нас есть несколько сервисов, каждый из которых использует интерфейс 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, это не очень хорошее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...