我正在使用ExceptionLogger
处理所有全局异常。我的继承类要求注入依赖项以供Nlog
调用。
public class NLogExceptionLogger : ExceptionLogger
{
private readonly ILoggingService _loggingService;
public NLogExceptionLogger(ILoggingService<NLogExceptionLogger> loggingService)
{
_loggingService = loggingService;
}
public override void Log(ExceptionLoggerContext context)
{
_loggingService.FirstLevelServiceLog(context.Exception.StackTrace);
}
}
LoggingService类:
public class LoggingService<T> : ILoggingService<T>
{
private readonly ILogger _logger;
public LoggingService()
{
string currentClassName = typeof(T).Name;
_logger = LogManager.GetLogger(currentClassName);
}
public void FirstLevelServiceLog(string log)
{
_logger.Log(LogLevel.Debug, log);
}
}
我的Unity代码:
public static UnityContainer RegisterComponents()
{
var container = new UnityContainer();
container.RegisterType(typeof(ILoggingService<>), typeof(LoggingService<>))
}
我正在通过以下方式全局注册ExceptionLogger
:(在这一行上我遇到了错误)
config.Services.Add(typeof(IExceptionLogger), typeof(NLogExceptionLogger));
//Register Dependency Container
config.DependencyResolver = new UnityDependencyResolver(UnityConfig.RegisterComponents());
我在运行时遇到以下错误:
System.ArgumentException:“类型RuntimeType必须从IExceptionLogger派生。”
我的假设是我没有正确注册NLogExceptionLogger
的依赖项。
关于在注册服务时如何解决依赖性的任何想法?
答案 0 :(得分:3)
将服务添加到ServicesContainer
时,将类型与服务实例一起添加。
假定已经安装了依赖关系解析程序,如果实例具有依赖关系,则可以用来解析实例。
var logger = config.DependencyResolver.GetService(typeof(NLogExceptionLogger));
config.Services.Add(typeof(IExceptionLogger), logger);
异常记录器和异常处理程序之间也有区别。
我建议您查看以下参考链接,以确定哪个链接适合您的需求。