Почему существует несколько экземпляров объекта, добавленного в контейнер IoC через AddSingleton в .NET Core 2.1? - PullRequest
0 голосов
/ 24 сентября 2018

Я использовал класс / интерфейс провайдера кеша для обертывания IMemoryCache начиная с бета-версий Core 1.0, и недавно я обновился до 2.1, и теперь я заметил много проблем с кешированием (что, вероятно, является единственной частью, которая мне НУЖНАбыть экземпляром Singleton).

Я вызываю встроенную функцию .AddMemoryCache (), а затем внедряю свой поставщик кэша, и все мои службы используют этого поставщика кэша.Я заметил проблему при удалении информации о пользователе из кеша после выполнения второго шага в процессе регистрации ... .Remove будет вызываться успешно, но затем последующий вызов вернет информацию о пользователе из кеша безчтобы вызвать фабричный метод для увлажнения кэша.

В конце концов, я добавил свойство InstanceId в свой поставщик кэша (который должен быть Singleton), чтобы добавить его ко всем выводам отладки, которые мойкеш провайдер имеет.

public string InstanceId { get; } = Guid.NewGuid().ToString();

Как только я это сделал, я заметил, что InstanceId отличались в выходных данных отладки!

Кто-то также упоминал эту проблему здесь , но никогда не былоответ.

Дополнительная информация: Я выводю идентификаторы экземпляров (статический список) в конструкторе моего CacheProvider (который является Singleton), и я вижу различные идентификаторы в журнале:

... MemoryCacheProvider: Отладка: InstanceIds = 432cb4da-e958-46ba-8a1b-f98bc46a7beb ... MemoryCacheProvider: Отладка: InstanceIds = 432cb4da-e958-46ba-8a1b-f98bc46a7beb, 286305f-476 5 5 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8 8 8 8 8 15 8 8 8 8 8 15 для1017 *Could it be the HTTP and HTTPS sites?

В противном случае я использую AddJwtBearer, который вызывает внедренный сервис, который также использует часть кэширования, а также UseRewrite и Use для маршрутизации (этоAngularJS SPA только с ядром MVC)

public static IApplicationBuilder UseLocalRewrite(this IApplicationBuilder app, bool forceHttps = true)
        {
            var options = new RewriteOptions()
                .AddRedirectToHttpsPermanent()
            ;

            return app
                .UseRewriter(options)
                .Use(async (context, next) =>
                 {
                     await next();
                     if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
                     {
                         context.Request.Path = "/index.html";
                         await next();
                     }
                 })
            ;
        }

1 Ответ

0 голосов
/ 27 сентября 2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...