Использование LogManager.GetLogger с Unity

Учитывая этот класс:

class Foo
{
    readonly ILog log;

    public Foo(ILog log)
    {
        this.log = log;
    } 

    ...
}

Я бы хотел настроить Unity для внедрения ILog. Это просто:

container.RegisterInstance<ILog>(LogManager.GetLogger(typeof(XYZ)));

Но я бы хотел вызвать Unity LogManager.GetLogger с определением типа родительского типа.

Это близко:

container.RegisterType<ILog>(new InjectionFactory((c, t, s) => LogManager.GetLogger(t)));

Но t в данном случае - это разрешаемый тип ( ILog ), а не тип, для которого разрешается объект ( Foo ).

Я знаю, что могу сделать это:

container.RegisterType<Foo>(new InjectionFactory(c => new Foo(LogManager.GetLogger(typeof(Foo)));

Но я не хочу, чтобы мне приходилось добавлять это сумасшедшее объявление каждый раз, когда я регистрирую объект.

Я знаю, что это можно сделать в Autofac, и я знаю, что настоящий ответ - не использовать Unity в первую очередь, но можно ли это сделать? :)

5
задан Paul Stovell 20 December 2011 в 14:19
поделиться