通用类型方法快捷方式

时间:2018-05-15 08:58:37

标签: c# methods properties

我最近写了一个记录器类,它在我的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 :(得分:1)

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返回的Graphics.DrawImage