3

Consider we have multiple services, each of them uses ILoggerFactory interface creating own instance of logger next way:

public class Foo
{
    private readonly ILogger _logger;

    public Foo(ILoggerFactory logger)
    {
        _logger = loggerFactory.CreateForContext(this.GetType());
    }
}

Also consider that we use Windsor Castle for dependency injection, so we have a registration like that:

container.Register(Component
    .For<ILoggerFactory>()
    .LifestyleSingleton()
    .Instance(new LoggerFactory());

Of course, we dont want to repeat CreateForContext() in every class. So, I'm trying to write something like that:

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;
    }
}

But there is a problem - I can't find how to get type of dependency owner. Is there any way to get it or another way to do same things?

Update I implemented ISubDependencyResolver, but it doesn't work with late bound components. So, if you use a lot registrations via UsingFactoryMethod for example, it isn't a great solution.

Roman
  • 31
  • 3
  • Related: https://stackoverflow.com/questions/39909779/log4net-with-castle-windsor – Steven Nov 01 '18 at 16:31
  • Take a look at the concept of `ISubDependencyResolver`. I think you need to build your own sub dependency resolver. – Steven Nov 01 '18 at 16:31

0 Answers0