Verwendung von IoC in einem benutzerdefinierten Log4Net-Appender

Ich habe leider schon eine ganze Weile nach etwas gesucht, bei dem es um Unity oder IoC mit Log4Net geht. Die einzigen Ergebnisse, die ich bekomme, sind, wie man sie machtILog automatisch über IoC aufgefüllt. Das istnicht was ich versuche zu tun.

Ich habe einen benutzerdefinierten Appender, der Daten über WCF an einen Server überträgt. Ich möchte eine Factory-Methode übergeben, vorzugsweise eine von Unity generierte, die die WCF-Client-Klasse für mich erstellt, damit ich die echte Client-Klasse während des Unit-Tests gegen Stubs austauschen kann. Das Problem ist, dass ich nirgendwo eine Erklärung finden kann, wie ein Argument an einen benutzerdefinierten log4net-Appender übergeben werden kann.

Hier ist, wie ich dies normalerweise mit Unity implementieren würde.

public class WcfAppender : BufferingAppenderSkeleton
{
    public WcfAppender(Func<ClientLoggerClient> loggerClientFactory) //How do I get this Func passed in?
    {
        LoggerClientFactory = loggerClientFactory;
    }


    private readonly Func<ClientLoggerClient> LoggerClientFactory; 
    private static readonly ILog Logger = LogManager.GetLogger(typeof(WcfAppender));
    private static readonly string LoggerName = typeof(WcfAppender).FullName;

    public override void ActivateOptions()
    {
        base.ActivateOptions();
        this.Fix = FixFlags.All;
    }

    protected override bool FilterEvent(LoggingEvent loggingEvent)
    {
        if (loggingEvent.LoggerName.Equals(LoggerName))
            return false;
        else
            return base.FilterEvent(loggingEvent);
    }


    protected override void SendBuffer(LoggingEvent[] events)
    {
        try
        {
            var client = LoggerClientFactory();
            try
            {
                client.LogRecord(events.Select(CreateWrapper).ToArray());
            }
            finally
            {
                client.CloseConnection();
            }
        }
        catch (Exception ex)
        {
            Logger.Error("Error sending error log to server", ex);
        }
    }

    private ErrorMessageWrapper CreateWrapper(LoggingEvent arg)
    {
        var wrapper = new ErrorMessageWrapper();

        //(Snip)

        return wrapper;
    }
}

Allerdings rufe ich nicht ancontainer.Resolve<WcfAppender>() es ist in der log4net-bibliothek, dassnew WcfAppender() wird gerufen. Wie teile ich der log4net-Bibliothek die Verwendung mit?new WcfAppender(factoryGeneratedFromUnity) stattdessen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage