我使用最新的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调用。
答案 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());