dotnetcore / EasyCaching

:boom: EasyCaching is an open source caching library that contains basic usages and some advanced usages of caching which can help us to handle caching more easier!
MIT License
1.93k stars 321 forks source link

Caching Intercept via AspectCore #429

Closed hhm89106 closed 1 year ago

hhm89106 commented 1 year ago

Description

When i set caching intercept on .net 7.0 and run via IIS Express in development enviorment, An unhandled exception occurred while processing the request.

builder.Host.UseServiceContext();

Steps to Reproduce

  1. Add builder.Host.UseServiceContext(); in Program.cs
  2. Add [EasyCachingAble(CacheKeyPrefix = "Test", Expiration = 100, IsHighAvailability = true)] to Interface Service

Related code

Expected behavior:

Runing without any erros.

Actual behavior:

System.InvalidOperationException: Failed to create instance of type 'Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider'. Possible reason is cannot match the best constructor of type 'Microsoft.AspNetCore.Mvc.ApiExplorer.EndpointMetadataApiDescriptionProvider'. at AspectCore.DependencyInjection.ServiceCallSiteResolver.ResolveTypeService(TypeServiceDefinition typeServiceDefinition) at AspectCore.DependencyInjection.ServiceCallSiteResolver.ResolveInternal(ServiceDefinition service) at AspectCore.DependencyInjection.ServiceCallSiteResolver.ResolveCallback(ServiceDefinition service) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) at AspectCore.DependencyInjection.ServiceCallSiteResolver.Resolve(ServiceDefinition service) at AspectCore.DependencyInjection.ServiceResolver.ResolveDefinition(ServiceDefinition definition) at AspectCore.DependencyInjection.ServiceCallSiteResolver.<>cDisplayClass7_0.b0(ServiceResolver resolver) at AspectCore.DependencyInjection.ServiceCallSiteResolver.<>cDisplayClass4_0.b0(ServiceResolver resolver) at AspectCore.DependencyInjection.ServiceResolver.ResolveDefinition(ServiceDefinition definition) at AspectCore.DependencyInjection.ServiceResolver.Resolve(Type serviceType) at AspectCore.DependencyInjection.ConstructorCallSiteResolver.<>cDisplayClass5_1.b2(IServiceResolver resolver) at AspectCore.DependencyInjection.ConstructorCallSiteResolver.<>cDisplayClass5_0.b1(IServiceResolver resolver) at AspectCore.DependencyInjection.ServiceCallSiteResolver.<>cDisplayClass4_0.b0(ServiceResolver resolver) at AspectCore.DependencyInjection.ServiceResolver.b12_0(ServiceDefinition d) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) at AspectCore.DependencyInjection.ServiceResolver.ResolveDefinition(ServiceDefinition definition) at AspectCore.DependencyInjection.ServiceResolver.Resolve(Type serviceType) at AspectCore.DependencyInjection.ConstructorCallSiteResolver.<>cDisplayClass5_1.b2(IServiceResolver resolver) at AspectCore.DependencyInjection.ConstructorCallSiteResolver.<>cDisplayClass5_0.b1(IServiceResolver resolver) at AspectCore.DependencyInjection.ServiceCallSiteResolver.<>cDisplayClass4_0.b__0(ServiceResolver resolver) at AspectCore.DependencyInjection.ServiceResolver.ResolveDefinition(ServiceDefinition definition) at AspectCore.DependencyInjection.ServiceResolver.Resolve(Type serviceType) at AspectCore.DependencyInjection.ServiceResolver.GetService(Type serviceType) at lambda_method4(Closure, Object, HttpContext, IServiceProvider) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

Specifications

hhm89106 commented 1 year ago

I try to add this code in Program.cs "builder.Host.UseServiceProviderFactory(new DynamicProxyServiceProviderFactory());" then the exception disappear.