C# Web API-使用Unity在ServiceContainer中注入依赖项

C# Web API-使用Unity在ServiceContainer中注入依赖项,c#,asp.net-web-api,dependency-injection,unity-container,C#,Asp.net Web Api,Dependency Injection,Unity Container,我正在使用ExceptionLogger处理所有全局异常。我的继承类要求注入依赖项以调用Nlog public class NLogExceptionLogger : ExceptionLogger { private readonly ILoggingService _loggingService; public NLogExceptionLogger(ILoggingService<NLogExceptionLogger> loggingService)

我正在使用
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);
    }
}
我在运行时遇到以下错误:

System.ArgumentException:“类型RuntimeType必须从IEExceptionLogger派生。”

我的假设是我没有正确注册
nlogeExceptionLogger
的依赖项


关于如何在注册服务时解决依赖关系,您有什么想法吗?

将服务添加到
ServicesContainer
时,您可以将类型添加到服务实例中

假设已经设置了依赖项解析器,如果实例具有依赖项,则可以使用该解析器来解析实例

var logger = config.DependencyResolver.GetService(typeof(NLogExceptionLogger));
config.Services.Add(typeof(IExceptionLogger), logger);
异常记录器和异常处理程序之间也有区别

我建议查看以下参考链接,以确定哪一个适合您的需要


参考

您是否正确设置了依赖项解析程序?此外,在添加服务时,还需要添加实例
config.Services.Add(typeof(IEExceptionLogger),{instance here})
@Nkosi:是的,我用解析器代码编辑了这个问题。好的,我建议你在添加服务之前设置好
public static UnityContainer RegisterComponents()
{
    var container = new UnityContainer();
    container.RegisterType(typeof(ILoggingService<>), typeof(LoggingService<>))
}
config.Services.Add(typeof(IExceptionLogger), typeof(NLogExceptionLogger));
//Register Dependency Container
config.DependencyResolver = new UnityDependencyResolver(UnityConfig.RegisterComponents());
var logger = config.DependencyResolver.GetService(typeof(NLogExceptionLogger));
config.Services.Add(typeof(IExceptionLogger), logger);