Я перемещаю некоторую логику из микросервиса в функцию лазури.
Дела идут довольно гладко, однако я столкнулся с проблемой зависимости. У меня были некоторые функции кэширования в микросервисе, которые я хотел бы сохранить в функции azure, однако проект функции не будет создан, поскольку он не может разрешить Microsoft.Extensions.Caching.Memory
пространство имен.
Я установил Microsoft.Extensions.DependencyInjection
через nuget в новом проекте функции, чтобы я мог использовать DI в этом приложении функции. Я думаю, что это причина, по которой Microsoft.Extensions.Caching
больше не разрешается.
Ошибка является общей: The type or namespace 'Caching' does not exist in the namespace 'Microsoft.Extensions'
Разве они оба не должны отображаться в пространстве имен Microsoft.Extensions?
У кого-нибудь есть идеи, как решить эту проблему?
Спасибо
РЕДАКТИРОВАТЬ: Некоторые примеры кода.
Код функции:
(Настройка DI почти точно это )
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using PI.Warehouses.API.Repositories;
using ESPIWarehouseFunction.Injection;
namespace ESPIWarehouseFunction
{
public static class WarehouseFunctions
{
[FunctionName("GetAll")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]HttpRequest req,
TraceWriter log, [Inject(typeof(IWarehouseStateRepository))]IWarehouseStateRepository repoW)
{
log.Info("GetAll Function is processing a request");
var warehouses = repoW.GetAllWarehouses();
return warehouses != null ?
(ActionResult)new OkObjectResult(warehouses) :
new BadRequestObjectResult("Something went wrong with this request");
}
}
}
Один из множества кусков кода, который использует кеш:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;
using MediatR;
using PI.Warehouses.Domain.Aggregate.Commands;
using PI.Warehouses.Domain.Aggregate.Events;
using PI.Warehouses.Domain.Model;
using PI.Warehouses.API.Repositories;
using Newtonsoft.Json;
using PI.Warehouses.Domain.Aggregate.Exceptions;
using Microsoft.Extensions.Caching.Memory;
namespace PI.Warehouses.API.Application.Handlers.Commands
{
public class AddMaterialHandler : IRequestHandler<AddMaterialCommand, EventList>
{
private readonly IEventRepository _repoEvents;
private readonly IWarehouseStateRepository _repoWarehouse;
private readonly IMediator _mediator;
private IMemoryCache _cache;
private EventList _eventsCreated;
public AddMaterialHandler(IEventRepository repoE, IWarehouseStateRepository repoW, IMediator mediator, IMemoryCache cache)
{
_repoEvents = repoE;
_repoWarehouse = repoW;
_mediator = mediator;
_cache = cache;
_eventsCreated = new EventList();
}
// some setups stuffs ...
WarehouseState state;
if (!_cache.TryGetValue(cmd.WarehouseId, out WarehouseState cachedState))
state = await _repoWarehouse.GetWarehouseState(cmd.WarehouseId);
else
state = new WarehouseState(cachedState);
// Rest of this handler
}
}