/// <summary>
/// Sends a log with a text obtained through a parameterized delegate with an exception and associated tags.
/// The delegate will be called only if the log is not filtered.
/// </summary>
/// <typeparam name="T1">Type of the first parameter that <paramref name="text"/> accepts.</typeparam>
/// <typeparam name="T2">Type of the second parameter that <paramref name="text"/> accepts.</typeparam>
/// <typeparam name="T3">Type of the third parameter that <paramref name="text"/> accepts.</typeparam>
/// <param name="this">This <see cref="IActivityMonitorLineSender"/> object.</param>
/// <param name="ex">The exception. Must not be null.</param>
/// <param name="tags">Tags for the log.</param>
/// <param name="text">Function that returns a string. Must not be null.</param>
/// <param name="param1">First parameter for the <paramref name="text"/> delegate.</param>
/// <param name="param2">Second parameter for the <paramref name="text"/> delegate.</param>
/// <param name="param3">Third parameter for the <paramref name="text"/> delegate.</param>
public static void Send <T1, T2, T3>(this IActivityMonitorLineSender @this, Exception ex, CKTrait tags, Func <T1, T2, T3, string> text, T1 param1, T2 param2, T3 param3)
{
ActivityMonitorLineSender s = (ActivityMonitorLineSender)@this;
if (s.IsRejected)
{
return;
}
s.InitializeAndSend(ex, tags, text == null ? null : text(param1, param2, param3));
}