2017-12-28 8 views
0

이 문제에 대한 인터넷에 관한 많은 질문과 정보가 있습니다. 그러나 4-5 시간을 검색하면 문제를 해결할 수 없습니다. 직접 또는 간접적 인 도움말/방향을 찾고 있습니다. 내가 사용하고InvalidOperationException : 'XXX.CustomExceptionFilter를 활성화하는 동안'YYY.ILogDataAccess '유형의 서비스를 확인할 수 없습니다.

: VS 2017 ASP 닷넷 코어 2.0

말은, 나는 해결책 3 개 프로젝트가있다.

  1. DATAACCESS (데이터베이스와 상호 작용)
  2. 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)); 
      } 
     ); 

전역 예외 필터에 추가되었습니다.

+0

당신이()''startup.cs''ConfigureServices에'ILogDataAccess'을 등록 의존성 문제처럼 보인다?'services.AddScoped (); '와 같은 것. – Curiousdev

+0

내가 지금까지 발견 한 것은'CustomExceptionFilter'의 생성자로 인해 오류가 표시되었습니다. –

답변

0

DI에 CustomExceptionFilter 대신 LogDataAccess을 등록해야합니다.

변화 :

services.AddSingleton<IExceptionFilter>(new CustomExceptionFilter(new LogDataAccess(
    appServiceConfig.ConnectionString, appServiceConfig.Database))); 

로는 :

services.AddSingleton<ILogDataAccess>(new LogDataAccess(
    appServiceConfig.ConnectionString, appServiceConfig.Database)); 
관련 문제