Günlüğe kaydedilirken, her zaman dize değişmezlerinde dolaşırsınız. C# parametresini bir parametre olarak geçir
I ( here açıklandığı gibi) birExpression<Func<T>> expression
ileterek özellikleri, alanlar ve değişkenleri için güzel çözüldü, bu yüzden bu gibi şeyler yapabilirsiniz:
Ben yöntemle
Demo
kendisi için benzer bir şey yapmak istiyorum
public void Demo(string someArgument)
{
LogFrameWork.LogLine("Demo"); // goal is to get rid of these string literals
LogFramework.Log(() => someArgument);
}
:
public static void Log(Delegate method)
{
string methodName = method.Method.Name;
LogLine(methodName);
}
0123:
public void Demo(string someArgument)
{
LogFramework.Log(this.Demo);
}
böyle şeyler denedim
ve bu:
public static void Log(Action method)
{
string methodName = method.Method.Name;
LogLine(methodName);
}
Ama derleyici hataları bunlar gibi olsun:
Argument 1: cannot convert from 'method group' to 'System.Delegate'
Argument 1: cannot convert from 'method group' to 'System.Action'
Ben Func<...> ve Action<...> kullanarak aşırı bir demet tanıtmak, ama bu aşırı karmaşık geliyor.
Herhangi bir parametreye ve isteğe bağlı bir sonuca sahip herhangi bir yöntem için bunu kapamanın bir yolu var mı?
--jeroen
PS: Ben this question burada bir ilintisi olabileceğini düşünüyorum, ama beni hiç cevaplar 'aha' Daha sonra bu temsilciyi kabul temsilci tanımlayabilirsiniz :-)
Sorunuzu anlıyorum, ancak, bazı AOP çerçevelerinde daha kolay ve daha genişletilebilir olacağını düşünmüyor musunuz? Çağırmada oturum açması gereken yöntemleri işaretleyen özel özellik oluşturabilirsiniz. – empi
Geçmişte AOP kullandım ve derleme/bağlantı zamanlarının fırıldaklara neden oldu. .NET'in zaten daha yüksek derleme/bağlantı süreleri olduğundan, bundan kaçınmayı tercih ederim. –
İfade ağaçlarını kullanarak gördüğüm bu genel sorun için her bir çözüm, parametreleri de eklemeniz gerektiğinden, aynı zamanda biraz garip olan çoklu aşırı yüklenme yaklaşımını kullandı. Manuel izleme günlüğü yazacak olursam, genellikle yöntem adını bir dize sabit olarak geçiririm ve bunları eşitlemeyi hatırlatmak için Resharper'a güvenirim. –