AspNetCoreRateLimit. NET Core 3.0 - невозможно разрешить параметр IMemoryCache cache - PullRequest
0 голосов
/ 14 февраля 2020

С момента перехода на. NET Core 3.0 и 3.1 Я получаю следующую ошибку с AspNetCoreRateLimit при запуске приложения / API:

'Autofa c .Core.Activators .Reflection.DefaultConstructorFinder 'для типа' AspNetCoreRateLimit.MemoryCacheRateLimitCounterStore 'может быть вызван с доступными службами и параметрами: Невозможно разрешить параметр' Microsoft.Extensions.Caching.Memory.IMemoryCache cache 'конструктора' Void .ctor (Microsoft.ExtensionsC). Memory.IMemoryCache. при запуске я могу избавиться от него:

services.AddSingleton<IMemoryCache, MemoryCache>()

Но меня беспокоит то, что этого не происходило в более ранних версиях. NET Core, его нет ни в одном из документов AspNetCoreRateLimit и я не знаю, понимают последствия простого добавления инъекций MemoryCache!

* 101 4 * Может ли кто-нибудь помочь мне выяснить, что мне не хватает / я делаю неправильно и почему это начало происходить в новых версиях. NET Core, но только работает. NET Core 2.1?

1 Ответ

1 голос
/ 20 февраля 2020

Вы добавляете IRateLimitCounterStore в конвейер здесь:

.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>()

Вы можете видеть из источника , что класс MemoryCacheRateLimitCounterStore принимает IMemoryCache в своем конструкторе :

public MemoryCacheRateLimitCounterStore(IMemoryCache cache) : base(cache)
{
}

Если вы не предоставите IMemoryCache для своего конвейера, этот класс не может быть создан с помощью DI (это то, что говорит вам ошибка).

Looking в истории исходного файла он, кажется, всегда требовал этот параметр для своего конструктора. Возможно, в версии 2.1 какой-то другой сервис добавлял IMemoryCache за кулисами, но больше не добавлял его для вас в 3.0.

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

...