NLog.Targets.FileTarget.GetFileAppenderFactory C# (CSharp) Method

GetFileAppenderFactory() private method

Returns the suitable appender factory ( IFileAppenderFactory) to be used to generate the file appenders associated with the FileTarget instance. The type of the file appender factory returned depends on the values of various FileTarget properties.
private GetFileAppenderFactory ( ) : IFileAppenderFactory
return IFileAppenderFactory
        private IFileAppenderFactory GetFileAppenderFactory()
        {
            if (!this.KeepFileOpen)
            {
                return RetryingMultiProcessFileAppender.TheFactory;
            }
            else if (this.NetworkWrites)
            {
                return RetryingMultiProcessFileAppender.TheFactory;
            }
            else if (this.ConcurrentWrites)
            {
#if !SupportsMutex
                return RetryingMultiProcessFileAppender.TheFactory;
#elif MONO
//
// mono on Windows uses mutexes, on Unix - special appender
//
                if (PlatformDetector.IsUnix)
                {
                    return UnixMultiProcessFileAppender.TheFactory;
                }
                else if (PlatformDetector.SupportsSharableMutex)
                {
                    return MutexMultiProcessFileAppender.TheFactory;
                }
                else
                {
                    return RetryingMultiProcessFileAppender.TheFactory;
                }
#else
                if (!PlatformDetector.SupportsSharableMutex)
                    return RetryingMultiProcessFileAppender.TheFactory;
                else if (!this.ForceMutexConcurrentWrites && PlatformDetector.IsDesktopWin32 && !PlatformDetector.IsMono)
                    return WindowsMultiProcessFileAppender.TheFactory;
                else
                    return MutexMultiProcessFileAppender.TheFactory;
#endif
            }
            else if (IsArchivingEnabled())
                return CountingSingleProcessFileAppender.TheFactory;
            else
                return SingleProcessFileAppender.TheFactory;
        }