Log4net和Unity注册

5
我正在尝试配置Unity,将ILog注入到我的类中。在LogManager.CreateLogger()中设置的类型/名称是ILog被注入的类。
这里有一个类似的问题,但是针对Structure Map:链接
2个回答

1

我知道这个答案很晚,但我最近遇到了这个问题。

现在有一个NuGet包,UnityLog4NetExtension,它注册了log4net.ILog接口和一些Unity构建策略,允许您只需注入一个ILog接口,然后Unity将使用它被注入的类来创建它。

该代码也可通过GitHub获得。

例如:

在需要注入ILog实例之前,向Unity容器添加扩展。我在引导程序中完成了这项工作。

//add the extension to the unity container 
container.AddNewExtension<Log4NetExtension>();

然后,只需注入 ILog 接口就可以了。

public class MyClass
{ 
    private readonly ILog _logger;

    public MyClass(ILog loggerForMyClass)
    {
        _logger = loggerForMyClass;
    }
}

这段代码的作用就像我写了一样:_logger = LogManager.GetLogger(typeof(MyClass))

0

这可能不是最好的方法,但这是我能找到的唯一方法。所以现在它是最好的方法 :-)

Container.RegisterType<ILog>(new InjectionFactory(factory => new LoggerForInjection()));

-

public class LoggerForInjection : ILog
{
    private ILog _log;

    public bool IsDebugEnabled
    {
        get { return Log.IsDebugEnabled; }
    }

    public bool IsErrorEnabled
    {
        get { return Log.IsErrorEnabled; }
    }

    public bool IsFatalEnabled
    {
        get { return Log.IsFatalEnabled; }
    }

    public bool IsInfoEnabled
    {
        get { return Log.IsInfoEnabled; }
    }

    public bool IsWarnEnabled
    {
        get { return Log.IsWarnEnabled; }
    }

    public ILogger Logger
    {
        get { return _log.Logger; }
    }

    private ILog Log
    {
        get
        {
            if (_log == null)
            {
                // My tests shows, that is takes about 1 milli second to get the calling type
                var stackTrace = new StackTrace();
                string callingType = stackTrace.GetFrame(2).GetMethod().DeclaringType.FullName;

                _log = LogManager.GetLogger(callingType);
            }
            return _log;
        }
    }

    public void Debug(object message)
    {
        Log.Debug(message);
    }

    public void Debug(object message, Exception exception)
    {
        Log.Debug(message, exception);
    }

    public void DebugFormat(string format, params object[] args)
    {
        Log.DebugFormat(format, args);
    }

    public void DebugFormat(string format, object arg0)
    {
        Log.DebugFormat(format, arg0);
    }

    public void DebugFormat(string format, object arg0, object arg1)
    {
        Log.DebugFormat(format, arg0, arg1);
    }

    public void DebugFormat(string format, object arg0, object arg1, object arg2)
    {
        Log.DebugFormat(format, arg0, arg1, arg2);
    }

    public void DebugFormat(IFormatProvider provider, string format, params object[] args)
    {
        Log.DebugFormat(provider, format, args);
    }

    public void Error(object message)
    {
        Log.Error(message);
    }

    public void Error(object message, Exception exception)
    {
        Log.Error(message, exception);
    }

    public void ErrorFormat(string format, params object[] args)
    {
        Log.ErrorFormat(format, args);
    }

    public void ErrorFormat(string format, object arg0)
    {
        Log.ErrorFormat(format, arg0);
    }

    public void ErrorFormat(string format, object arg0, object arg1)
    {
        Log.ErrorFormat(format, arg0, arg1);
    }

    public void ErrorFormat(string format, object arg0, object arg1, object arg2)
    {
        Log.ErrorFormat(format, arg0, arg1, arg2);
    }

    public void ErrorFormat(IFormatProvider provider, string format, params object[] args)
    {
        Log.ErrorFormat(provider, format, args);
    }

    public void Fatal(object message)
    {
        Log.Fatal(message);
    }

    public void Fatal(object message, Exception exception)
    {
        Log.Fatal(message, exception);
    }

    public void FatalFormat(string format, params object[] args)
    {
        Log.FatalFormat(format, args);
    }

    public void FatalFormat(string format, object arg0)
    {
        Log.FatalFormat(format, arg0);
    }

    public void FatalFormat(string format, object arg0, object arg1)
    {
        Log.FatalFormat(format, arg0, arg1);
    }

    public void FatalFormat(string format, object arg0, object arg1, object arg2)
    {
        Log.FatalFormat(format, arg0, arg1, arg2);
    }

    public void FatalFormat(IFormatProvider provider, string format, params object[] args)
    {
        Log.FatalFormat(provider, format, args);
    }

    public void Info(object message)
    {
        Log.Info(message);
    }

    public void Info(object message, Exception exception)
    {
        Log.Info(message, exception);
    }

    public void InfoFormat(string format, params object[] args)
    {
        Log.InfoFormat(format, args);
    }

    public void InfoFormat(string format, object arg0)
    {
        Log.InfoFormat(format, arg0);
    }

    public void InfoFormat(string format, object arg0, object arg1)
    {
        Log.InfoFormat(format, arg0, arg1);
    }

    public void InfoFormat(string format, object arg0, object arg1, object arg2)
    {
        Log.InfoFormat(format, arg0, arg1, arg2);
    }

    public void InfoFormat(IFormatProvider provider, string format, params object[] args)
    {
        Log.InfoFormat(provider, format, args);
    }

    public void Warn(object message)
    {
        Log.Warn(message);
    }

    public void Warn(object message, Exception exception)
    {
        Log.Warn(message, exception);
    }

    public void WarnFormat(string format, params object[] args)
    {
        Log.WarnFormat(format, args);
    }

    public void WarnFormat(string format, object arg0)
    {
        Log.WarnFormat(format, arg0);
    }

    public void WarnFormat(string format, object arg0, object arg1)
    {
        Log.WarnFormat(format, arg0, arg1);
    }

    public void WarnFormat(string format, object arg0, object arg1, object arg2)
    {
        Log.WarnFormat(format, arg0, arg1, arg2);
    }

    public void WarnFormat(IFormatProvider provider, string format, params object[] args)
    {
        Log.WarnFormat(provider, format, args);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接