Инъекция зависимостей 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 (который разрешает имя).

Другие вопросы по тегам