Castle Windsor依赖注入:使用调用者类型作为参数

时间:2011-04-21 05:52:44

标签: c# reflection log4net castle-windsor ioc-container

以下课程在Windsor Castle容器中注册:

namespace MyNamespace
{
    class Foo : IFoo
    {
        public Foo(ILog log)
        {
             _log = log;
        }
        ...
    }
}

ILog是一个log4net记录器,目前注册如下:

Component.For<ILog>().UseFactoryMethod(
    () => LogManager.GetLogger(Assembly.GetCallingAssembly().FullName));

我想创建一个名为调用类型的记录器(在本例中为"MyNamespace.Foo"),而不是像调用程序集一样。有没有办法做到这一点,除了使用反射来玩堆栈帧?

1 个答案:

答案 0 :(得分:3)

城堡温莎伐木设施可以满足您的需求。它已经与log4net或NLog集成(参见:how to set up logging facility)。

如果您仍然好奇,可以检查源代码以了解它是如何完成的。查看log4net Integration sourcelogging facility源代码,尤其是LoggerResolver类(解析名称)。