Я использую services.AddDistributedMemoryCache()
в своем классе .Net Core 3 web api startup.cs
.Когда я впервые устанавливаю кеш:
public void SetCommandEventMappingCache(IServiceCollection serviceCollection)
{
var cache = serviceCollection.BuildServiceProvider().GetService<IDistributedCache>();
var mappingList = new List<CommandEventMapping>()
{
new CommandEventMapping()
{
ActionType = "add",
GrowFlowCommand = new AddEmployee(),
GrowFlowEvent = "EmployeeAdded",
TraceabilityCommand = "employee_add"
}
};
cache.Set<List<CommandEventMapping>>(
"command_event_mappings", mappingList,new DistributedCacheEntryOptions()
{
AbsoluteExpiration = DateTimeOffset.Now.AddDays(1)
});
//I am able to get back the command_event_mappings here.
//Once the IDistributedCache is injected. the data is lost
var commandMapping = cache.Get<List<CommandEventMapping>>("command_event_mappings");
}
Во всех примерах, которые я видел, это обычно так.Разница лишь в том, что я добавил расширение для пар Set<T>
и Get<T>
.Я попробовал это без новых методов расширения и получил тот же результат.Фактический IDistributedCache
, когда он вводится, доступен, но ранее кэшированные данные исчезли.Вот пример того, как я его впрыскиваю.
public LegacyCommandBus(IServiceProvider provider, IDistributedCache cache,
ITraceabilityTenantService tenantService, IHttpClientFactory httpClientFactory)
: base(provider)
{
_provider = provider;
_cache = cache;
_tenantService = tenantService;
_httpClientFactory = httpClientFactory;
//This is null
_commandEventMappings = cache.Get<List<CommandEventMapping>>("command_event_mappings");
}