确定使用Castle Windsor容器实例化对象的类或程序集

时间:2014-08-27 19:12:51

标签: c# .net castle-windsor

我使用最新的Castle Windsor容器,我想创建一个记录器,它将写入我想要的文件,但也写入调用者程序集名称。所以这是一个例子:

namespace Core.Datalayer
{
    public class Foo
    {
       public Foo(ILogger logger)
       {
          logger.Write("test line");
       }
    }
}

容器正确地给出了实例,但我无法弄清楚如何确定调用者程序集名称或调用者类名称?我希望记录器写入这样的文件:

  

“assembly Core.Datalayer- test line”

是否有可能确定实例化ILogger接口的位置?

我尝试了Assembly.GetCallingAssembly(),但总是使用Castle.Core,因为堆栈已满了Castle.Core调用。

1 个答案:

答案 0 :(得分:2)

您可以使用子顺从解析程序。我认为下面的代码应该对你有用。

public class Logger
{
    public Logger(string name)
    {
    }
}

public class LogResolver : ISubDependencyResolver
{
    public bool CanResolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model,
                           DependencyModel dependency)
    {
        return dependency.TargetType == typeof(Logger);
    }

    public object Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model,
                          DependencyModel dependency)
    {
        return new Logger(model.Name);
    }
}

使用

将logger安装到容器中
container.Kernel.Resolver.AddSubResolver(new LogResolver());