Исправлена ​​проблема с кэшированием в Виндзорском замке - PullRequest
0 голосов
/ 25 марта 2011

Метод WindsorContainer :: Resolve, похоже, не уделяет достаточно внимания аргументам, которые я использую.Это, или это делает некоторое кэширование и не разрешает второй раз.

У меня есть ILogger, что не важно видеть, и одна его реализация:

public class log4netLogger : ILogger
{
    private log4net.ILog _logger;

    public log4netLogger(string name)
    {
        _logger = log4net.LogManager.GetLogger(name);
    }

    public log4netLogger(Type type)
    {
        _logger = log4net.LogManager.GetLogger(type);
    }

    // ...
}

И у меня есть следующий код, который разрешает ILogger из конфигурации:

WindsorContainer c = new WindsorContainer(new XmlInterpreter());
var a = c.Resolve<ILogger>(new { name = "asdf" });
var b = c.Resolve<ILogger>(new { type = typeof(int) });

Когда назначается a, используется первый конструктор ... когда назначается b, не используется ни один конструктор, а a == b правда.Если я переверну порядок и сначала назначу b, будет использован 2-й конструктор, и экземпляры ILogger будут по-прежнему идентичны.

Нужно ли что-то делать для того, чтобы уделить больше внимания параметрам (в конфиге возможно), или я просто совершенно не так делаю?

Конфиг выглядит так:

<component id="Logger"
           type="namespace.log4netLogger, assembly"
           service="namespace.ILogger, assembly"/>

1 Ответ

1 голос
/ 25 марта 2011
...