Использование методов расширения внутри самого расширенного класса

Допустим, у меня есть интерфейс, например:

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, тип Logger.Type) во что угодно (модификатор public является чем-то вроде meh...) и использую все методы расширения для фактического ведения журнала.

Пока все хорошо... или не очень? Что-то не так с этим подходом? Если нет, то почему неудобство:

catch (Exception ex) {
    this.Log(ex); // this works
    Log(ex); // this goes not
5
задан Eugene Ryabtsev 22 May 2012 в 06:06
поделиться