Я использую 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);
}
}
Мой код единства:
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: 'The type RuntimeType must derive from IExceptionLogger.'
Я предполагаю, что я неправильно регистрирую зависимость для NLogExceptionLogger.
Есть идеи, как разрешить зависимость при регистрации службы?
@Nkosi: Да, я редактировал вопрос с кодом преобразователя.
Правильно, я бы посоветовал вам установить это перед добавлением службы





При добавлении службы в ServicesContainer вы добавляете тип с экземпляром службы.
Предполагая, что преобразователь зависимостей уже настроен, его можно использовать для разрешения экземпляра, если у него есть зависимости.
var logger = config.DependencyResolver.GetService(typeof(NLogExceptionLogger));
config.Services.Add(typeof(IExceptionLogger), logger);
Также существует разница между регистраторами исключений и обработчиками исключений.
Я предлагаю просмотреть следующую ссылку, чтобы определить, какая из них подходит для ваших нужд.
Вы правильно настроили преобразователь зависимостей? А также при добавлении услуги вы добавляете экземпляр.
config.Services.Add(typeof(IExceptionLogger), {instance here});