Допустим, у меня есть интерфейс, например:
public interface ILoggable
{
void Log(Func<string> message, Logger.Type type);
}
И некоторые методы расширения, например:
public static class Logger
{
public static void Log(this ILoggable loggable, Func<string> message) { loggable.Log(message, Type.Information); }
public static void Log(this ILoggable loggable, string prefix, byte[] data, int len) { /* snip */ }
public static void Log(this ILoggable loggable, Exception ex) { /* snip */ }
// And so on...
}
Затем в любом классе CoreService : ServiceBase, ILoggable
или что-то подобное. Я реализую этот public void Log (сообщение Func
во что угодно (модификатор public является чем-то вроде meh...) и использую все методы расширения для фактического ведения журнала.
Пока все хорошо... или не очень? Что-то не так с этим подходом? Если нет, то почему неудобство:
catch (Exception ex) {
this.Log(ex); // this works
Log(ex); // this goes not