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);