Jak utworzyć własną metodę podobną do String.Format przy użyciu formatowania kompozytowego w języku C #

Lubię, jak String.Format używa argumentów do wstrzykiwania zmiennych do łańcucha, który formatuje. Nazywa się to formowaniem kompozytowym i jest omawiane przez MSDNtutaj.

Chcę tę funkcjonalność z moją fasadą logowania:

string foo = "fancy";
string bar = "message";
log.Debug("My {0} log {1}.", foo, bar)

My ILoggerFacade ma następujący podpis metody:

void Debug<T>(T message, params Object[] args);

I wiem, że mogę to zrealizować po prostu:

ILog m_Log = \\some logging implementation
public void Debug<T>(T message, params Object[] args)
{
    m_Log.Debug(String.Format(message, args));
}

Jednak w Visual Studio nie dostaję wymyślnego podświetlenia argumentów {0}, {1}, ...:

Myślę, że to ReSharper jest dla nich odpowiedzialny i wygląda na to, że ignoruje argumenty formatujące i nie udziela pomocy „intellisense”. Nie jest to dobre, ponieważ inni deweloperzy, którzy będą korzystać z elewacji, będą tego oczekiwać.

Jak uzyskać podświetlanie argumentów i „intellisense” dla niestandardowych formatowanych metod podobnych do tych, które działają:

Console.WriteLine(...)
String.Format(...)
etc...

Każda pomoc byłaby doceniana.

questionAnswers(1)

yourAnswerToTheQuestion