この問題に関するインターネットに関する多くの質問と情報があります。しかし、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()
私も、このように同じ方法でCustomExceptionFilter
ConfigureServices()
を追加しました。
services.AddMvc(
config =>
{
config.Filters.Add(typeof(CustomExceptionFilter));
}
);
グローバル例外フィルタに追加されます。
それはあなたが() '' 'startup.cs' ConfigureServicesであなたの' ILogDataAccess'を登録した依存関係の問題のように思えますか?'services.AddScoped();' –
Curiousdev
のようなものです。これは、 'CustomExceptionFilter'のコンストラクタのせいでエラーが表示されています。 –