我正在试验这些新的 .NET 4.5 属性,这些属性有望使日志记录更容易一些。运行时应负责提供值,例如 [CallerMemberNameAttribute] 映射到应包含调用者方法名称的字符串参数。
但是,我发现 MEF 似乎在干扰。
考虑以下接口:
[InheritedExport]
public interface ILogger
{
void Write(string message, string methodName = "", string srcFilePath = "", int srcLineNumber = 0, params object[] args);
}
以及以下实现:
public sealed class Logger : ILogger
{
[MethodImpl(MethodImplOptions.NoInlining)]
public void Write(string message, [CallerMemberName] string methodName = "", [CallerFilePath] string srcFilePath = "", [CallerLineNumber] int srcLineNumber = 0, params object[] args)
{
// do some logging
}
}
如果将此 ILogger 导入应用程序的组合容器并使用 ILogger.Write 方法,则运行时应填写标有 [CallerX] 属性的可选参数。
但是,这不会发生,所有值都设置为其默认值。
有任何想法吗?或者这是一个错误?