Инъекция зависимостей Castle Windsor: используйте тип вызывающей стороны в качестве параметра
Следующий класс зарегистрирован в контейнере Виндзорского замка:
namespace MyNamespace
{
class Foo : IFoo
{
public Foo(ILog log)
{
_log = log;
}
...
}
}
ILog
это log4net logger, в настоящее время зарегистрирован так:
Component.For<ILog>().UseFactoryMethod(
() => LogManager.GetLogger(Assembly.GetCallingAssembly().FullName));
Я хотел бы создать регистратор с именем, как тип вызова (в этом случае "MyNamespace.Foo"
) а не как вызывающая сборка. Есть ли способ сделать это, кроме использования отражения для игры со стековыми кадрами?
1 ответ
Лесозаготовительная мастерская замка делает то, что вы хотите. Он уже интегрирован с log4net или NLog (см.: как настроить средство ведения журнала).
Если вам все еще интересно, вы можете изучить исходный код, чтобы увидеть, как именно это можно сделать. Взгляните на источник интеграции log4net и источник средства ведения журнала, особенно на класс LoggerResolver (который разрешает имя).