私は、ロギングを少し簡単にすることを約束するこれらの新しい .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] 属性でマークされたオプションのパラメーターを入力する必要があります。
ただし、これは発生しません。すべての値がデフォルトに設定されています。
何か案は?それともこれはバグですか?