Инъекция зависимостей Castle Windsor: используйте тип вызывающей стороны в качестве параметра - PullRequest
3 голосов
/ 21 апреля 2011

Следующий класс зарегистрирован в контейнере Виндзорского замка:

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 Ответ

3 голосов
/ 21 апреля 2011

Лесозаготовительная мастерская замка делает то, что вы хотите. Он уже интегрирован с log4net или NLog (см .: как настроить средство ведения журнала ).

Если вам все еще интересно, вы можете изучить исходный код, чтобы увидеть, как именно это можно сделать. Взгляните на источник интеграции log4net и источник средства ведения журнала *1007* и особенно на класс LoggerResolver (который разрешает имя).

...