EasyCaching icon indicating copy to clipboard operation
EasyCaching copied to clipboard

MemoryPacker and Redis

Open c5racing opened this issue 1 year ago • 5 comments

Description

I'm trying to replace the Newtonsoft Serializer with the new MemoryPacker to compare performance. When adding MemoryPacker, with Redis, I get an error any time trying to DI the EasyCachingLibraries

Steps to Reproduce

Register EasyCaching; Attempt to resolve IEasyCachingProviderFactory;

Related code

            services.AddEasyCaching(options =>
            {
                options.UseRedis(config =>
                {
                    config.DBConfig.AllowAdmin = true;
                    config.DBConfig.Endpoints.Add(new EasyCaching.Core.Configurations.ServerEndPoint(redisSettings.Host, redisSettings.Port));
                    config.SerializerName = "mempack";
                    config.DBConfig.ConnectionTimeout = 10000;
                    config.EnableLogging = false;

                    if (!string.IsNullOrWhiteSpace(redisSettings.Password))
                    {
                        config.DBConfig.Password = redisSettings.Password;
                        config.DBConfig.IsSsl = true;
                    }
                }, cacheName).WithMemoryPack(x =>
                {
                    x.StringEncoding = StringEncoding.Utf8;
                }, "mempack");
            });

var providerFactory = serviceProvider.GetRequiredService<IEasyCachingProviderFactory>();

Expected behavior: [What you expected to happen] I would expect to replace Newtonsoft with MessagePack

Actual behavior: [What actually happened] Receive the following error when trying to resolve IEasyCachingProviderFactory

Autofac.Core.DependencyResolutionException HResult=0x80131500 Message=An exception was thrown while activating λ:EasyCaching.Core.IRedisCachingProvider -> λ:EasyCaching.Core.Serialization.IEasyCachingSerializer[] -> λ:EasyCaching.Core.Serialization.IEasyCachingSerializer. Source=Autofac StackTrace: at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action1 next) at Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action1 next) at Autofac.Core.Resolving.Middleware.SharingMiddleware.<>c__DisplayClass5_0.<Execute>b__0() at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func1 creator) at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable1 qualifyingId, Func1 creator) at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action1 next) at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action1 next) at Autofac.Core.Resolving.ResolveOperation.InvokePipeline(ResolveRequest request, DefaultResolveRequestContext requestContext) at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request) at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request) at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request) at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request) at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable1 parameters, Object& instance) at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable1 parameters) at Autofac.ResolutionExtensions.ResolveOptional(IComponentContext context, Type serviceType, IEnumerable1 parameters) at Autofac.ResolutionExtensions.ResolveOptional(IComponentContext context, Type serviceType) at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) at Caching.CachingProvider..ctor(IOptions1 cacheSettings, IServiceProvider serviceProvider, ILockProvider lockProvider, ILogger1 logger) in C:\Users\admin\source\repos\SRM\src\BuildingBlocks\Caching\CachingProvider.cs:line 42 at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()

This exception was originally thrown at this call stack: [External Code]

Inner Exception 1: MissingMethodException: Method not found: 'Void MemoryPack.MemoryPackSerializerOptions.set_StringEncoding(MemoryPack.StringEncoding)'.

c5racing avatar Jan 06 '23 23:01 c5racing