Метод 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"/>