microsoft / microsoft/aspire

Versions after 9.0.2 all create some kind of circular distributed cache dependency in my codebase

Open
#11,215 0 comments 0 reactions 0 assignees View on GitHub
needs-area-label
Dominant language
C#
Stars
6.3k
Forks
991
Avg merge
2d 15h
Merged PRs (30d)
196

Description

This is present in 9.0.3 - 9.0.8

I get the error below.

This is a dotnet aspire project, and I am using hybrid cache in it as well as redis.

```















all
runtime; build; native; contentfiles; analyzers; buildtransitive







all
runtime; build; native; contentfiles; analyzers; buildtransitive



















```

Here is an excerpt of the DI setup

```
var systemOptions = new SystemOptions();
config.Bind(ConfigurationKeys.SystemOptions, systemOptions);

srv.AddHybridCache(options =>
{
options.DefaultEntryOptions = new HybridCacheEntryOptions
{
Expiration = TimeSpan.FromMinutes(systemOptions.DistributedCacheExpirationMinutes),
LocalCacheExpiration = TimeSpan.FromMinutes(systemOptions.CacheExpirationMinutes)
};
});
srv.TryAddSingleton(typeof(IHybridCacheSerializer<>), typeof(HybridCacheSerializer<>)); // note this works even when NOT running under aspire, and simplifies the code to always
// do it this way
// NOTE there is a bug in Microsoft.Extensions.Caching.StackExchangeRedis 9.0.3-9.0.5, must use
// 9.0.2
builder.AddRedisDistributedCache("Redis");
```

```
{
"type": "https://httpstatuses.io/500",
"title": "Internal Server Error",
"status": 500,
"detail": "An exception was thrown while activating TH.BookClub.Infrastructure.SessionStateService.",
"exceptionDetails": [
{
"message": "The constructor of type 'Microsoft.Extensions.Caching.Hybrid.Internal.DefaultHybridCache' attempted to create another instance of itself. This is not permitted because the service is configured to only allowed a single instance per lifetime scope.",
"type": "Autofac.Core.DependencyResolutionException",
"raw": "Autofac.Core.DependencyResolutionException: The constructor of type 'Microsoft.Extensions.Caching.Hybrid.Internal.DefaultHybridCache' attempted to create another instance of itself. This is not permitted because the service is configured to only allowed a single instance per lifetime scope.\r\n at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func`1 creator)\r\n at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable`1 qualifyingId, Func`1 creator)\r\n at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest& request)\r\n at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()\r\n at Autofac.Core.Activators.Reflection.ReflectionActivator.<>c__DisplayClass14_0.b__0(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)",
"stackFrames": [
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func creator)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable qualifyingId, Func creator)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ref ResolveRequest request)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Activators.Reflection.ReflectionActivator+<>c__DisplayClass14_0.b__0(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
}
]
},
{
"message": "An exception was thrown while activating TH.BookClub.Infrastructure.SessionStateService.",
"type": "Autofac.Core.DependencyResolutionException",
"raw": "Autofac.Core.DependencyResolutionException: An exception was thrown while activating TH.BookClub.Infrastructure.SessionStateService.\r\n ---> Autofac.Core.DependencyResolutionException: The constructor of type 'Microsoft.Extensions.Caching.Hybrid.Internal.DefaultHybridCache' attempted to create another instance of itself. This is not permitted because the service is configured to only allowed a single instance per lifetime scope.\r\n at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func`1 creator)\r\n at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable`1 qualifyingId, Func`1 creator)\r\n at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest& request)\r\n at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()\r\n at Autofac.Core.Activators.Reflection.ReflectionActivator.<>c__DisplayClass14_0.b__0(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n --- End of inner exception stack trace ---\r\n at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func`1 creator)\r\n at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable`1 qualifyingId, Func`1 creator)\r\n at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)\r\n at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest& request)\r\n at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest& request)\r\n at Autofac.Core.Lifetime.LifetimeScope.Autofac.IComponentContext.ResolveComponent(ResolveRequest& request)\r\n at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)\r\n at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable`1 parameters)\r\n at lambda_method1625(Closure, Object, HttpContext, IServiceProvider)\r\n at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)\r\n at TH.BookClub.API.Middleware.QueryStringToHeaderMiddleware.InvokeAsync(HttpContext context) in D:\\src\\TH.BookClub\\TH.BookClub.Api\\src\\TH.BookClub.API\\Middleware\\QueryStringToHeaderMiddleware.cs:line 66\r\n at Hellang.Middleware.ProblemDetails.ProblemDetailsMiddleware.Invoke(HttpContext context)",
"stackFrames": [
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func creator)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable qualifyingId, Func creator)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action next)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ref ResolveRequest request)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ref ResolveRequest request)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.Core.Lifetime.LifetimeScope.Autofac.IComponentContext.ResolveComponent(ref ResolveRequest request)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable parameters, out object instance)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable parameters)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "lambda_method1625(Closure , object , HttpContext , IServiceProvider )",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": null,
"fileName": null,
"function": "Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
},
{
"filePath": "D:\\src\\TH.BookClub\\TH.BookClub.Api\\src\\TH.BookClub.API\\Middleware\\QueryStringToHeaderMiddleware.cs",
"fileName": "QueryStringToHeaderMiddleware.cs",
"function": "TH.BookClub.API.Middleware.QueryStringToHeaderMiddleware.InvokeAsync(HttpContext context)",
"line": 66,
"preContextLine": 60,
"preContextCode": [
" var value = string.IsNullOrEmpty(format) ? paramValue : string.Format(format, paramValue);",
" context.Request.Headers.Append(headerName, new[] { value });",
" }",
" }",
" }",
""
],
"contextCode": [
" await _next.Invoke(context);"
],
"postContextCode": [
" }",
"}"
]
},
{
"filePath": null,
"fileName": null,
"function": "Hellang.Middleware.ProblemDetails.ProblemDetailsMiddleware.Invoke(HttpContext context)",
"line": null,
"preContextLine": null,
"preContextCode": null,
"contextCode": null,
"postContextCode": null
}
]
}
]
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.