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