이 문제에 대한 인터넷에 관한 많은 질문과 정보가 있습니다. 그러나 4-5 시간을 검색하면 문제를 해결할 수 없습니다. 직접 또는 간접적 인 도움말/방향을 찾고 있습니다. 내가 사용하고InvalidOperationException : 'XXX.CustomExceptionFilter를 활성화하는 동안'YYY.ILogDataAccess '유형의 서비스를 확인할 수 없습니다.
: VS 2017 ASP 닷넷 코어 2.0
말은, 나는 해결책 3 개 프로젝트가있다.
- DATAACCESS (데이터베이스와 상호 작용)
- API 광고 (또는 서비스) 내 API의
, IExceptionFilter
에서 CustomExceptionFilter
가 (여러 가지 방법으로 로그인하기) 로그인. 나는 OnException()
에서 모든 예외를 처리하고 있습니다.
로그 내부에 OnException
을 생성해야합니다. 로그하려면 DB에 접속해야합니다. 이 OnException()
방법 LoggingWrapper 필요하므로 그 목적
Startup.cs
,
ConfigureServices()
, 나는,
CustomExceptionFilter
의 의존성을 주입하고있다.
services.AddSingleton<IExceptionFilter>(
new CustomExceptionFilter(
new LogDataAccess(
appServiceConfig.ConnectionString, appServiceConfig.Database)));
다음
LogDataAccess
데이터베이스에 로그인 삽입하는 클래스입니다 : 여기
CustomExceptionFilter
클래스 등의 생성자를 오버라이드 한 그리고
: 프로젝트를 구축
private ILogDataAccess logDataAccess;
public CustomExceptionFilter(ILogDataAccess logDataAccess)
{
this.logDataAccess = logDataAccess;
}
괜찮습니다. 내가 실행하는 동안 startup.cs
은 지금까지 잘 실행합니다. logDataAccess
이 멋지게 인스턴스화됩니다. Startup.cs에서 다른 문을 완료 한 후 "program.cs
"의 진입 점 에서 오류가 표시됩니다.
여기에 오류 스택 추적이 나와 있습니다.
System.InvalidOperationException: Unable to resolve service for type 'DataAccess.ILogDataAccess' while attempting to activate 'QuestionService.Common.CustomExceptionFilter'.
at Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
at lambda_method(Closure , IServiceProvider , Object[])
at Microsoft.AspNetCore.Mvc.TypeFilterAttribute.CreateInstance(IServiceProvider serviceProvider)
at Microsoft.AspNetCore.Mvc.Internal.DefaultFilterProvider.ProvideFilter(FilterProviderContext context, FilterItem filterItem)
at Microsoft.AspNetCore.Mvc.Internal.DefaultFilterProvider.OnProvidersExecuting(FilterProviderContext context)
at Microsoft.AspNetCore.Mvc.Internal.FilterFactory.CreateUncachedFiltersCore(IFilterProvider[] filterProviders, ActionContext actionContext, List`1 filterItems)
at Microsoft.AspNetCore.Mvc.Internal.FilterFactory.GetAllFilters(IFilterProvider[] filterProviders, ActionContext actionContext)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvokerCache.GetCachedResult(ControllerContext controllerContext)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvokerProvider.OnProvidersExecuting(ActionInvokerProviderContext context)
at Microsoft.AspNetCore.Mvc.Internal.ActionInvokerFactory.CreateInvoker(ActionContext actionContext)
at Microsoft.AspNetCore.Mvc.Internal.MvcAttributeRouteHandler.<>c__DisplayClass12_0.<RouteAsync>b__0(HttpContext c)
at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext()
I는 동일한 방법뿐만 아니라 이런 ConfigureServices()
CustomExceptionFilter
에 첨가 하였다.
services.AddMvc(
config =>
{
config.Filters.Add(typeof(CustomExceptionFilter));
}
);
전역 예외 필터에 추가되었습니다.
당신이()''startup.cs''ConfigureServices에'ILogDataAccess'을 등록 의존성 문제처럼 보인다?'services.AddScoped(); '와 같은 것. –
Curiousdev
내가 지금까지 발견 한 것은'CustomExceptionFilter'의 생성자로 인해 오류가 표시되었습니다. –