Общий тип методов ярлык - PullRequest
0 голосов
/ 15 мая 2018

Я недавно написал класс регистратора, который инициализируется в моем IoC.

public static class IoC() {
    public static ILogger Logger => IoC.Get<ILogger>();
    [...]
}

ILogger имеет метод универсального типа:

void Log<T>(string message, LogLevel level = LogLevel.Info);

, чтобы я мог поддерживать свойлоги лучше.

Я могу назвать это так:

IoC.Logger.Log<GeneralLog>("My message");

Теперь, это довольно длинная строка.

Есть ли возможность в C #, так чтоЯ мог бы объявить ярлык для метода Log<T>() с предопределенным универсальным типом?

Например:

Вместо

IoC.Logger.Log<GeneralLog>("My message");

Я мог бы написать

IoC.Logger.General("Message"); // and this should reference to IoC.Logger.Log<GeneralLog>

1 Ответ

0 голосов
/ 15 мая 2018

IoC.Logger имеет тип ILogger, который предположительно находится вне вашего контроля, поэтому вы не можете отредактировать его, чтобы добавить этот метод.

Вы можете написать его как метод расширения:

public static class ILoggerExtensions
{
    public static void General(this ILogger logger, string message)
    {
        logger.Log<GeneralLog>(message);
    }
}

Теперь вы можете звонить .General(string) на каждый ILogger, например, тот, который был возвращен IoC.Logger.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...