Учитывая этот класс:
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, но можно ли это сделать? :)