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
,将使用第二个构造函数,ILogger的实例仍然是相同的。
我是否需要做一些额外的事情才能密切关注参数(或许在配置中),或者我只是完全做错了?
Config看起来像:
<component id="Logger"
type="namespace.log4netLogger, assembly"
service="namespace.ILogger, assembly"/>