Невозможно связать параметр, так как тип параметра не поддерживается привязкой (HttpTrigger из Azure Функции) - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно перенести часть монолита, чтобы иметь возможность независимо запускать перенесенную деталь, но я новичок в azure функциях. Несколько HttpTriggers содержат неподдерживаемый тип параметра. (IMultiplierService)

public static async Task<IActionResult> GetMultiplier( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "multipliers/{id:guid}")] HttpRequest req, string id, IMultiplierService multiplierService){ ... }

Я читаю онлайн и понимаю, что string id является ссылкой на {id:guid} в маршруте, но я не удалось найти в Интернете, для чего предназначен такой интерфейс, заданный в качестве параметра.

(IMultiplierService - это интерфейс, подобный CRUD. Содержит метод, такой как 'GetById' или 'GetAll'.)

Может ли кто-нибудь объяснить, как поддерживать такой пользовательский класс, как ввод параметров для функции HttpTrigger Azure.

Если у вас есть вопросы или вам нужна дополнительная информация. Go впереди.

1 Ответ

0 голосов
/ 30 апреля 2020

Правильный способ вставить подобный интерфейсу интерфейс в функции azure - использовать внедрение зависимостей. Вам больше не нужно создавать функции stati c. Все, что вам нужно сделать, это зарегистрировать интерфейс и его реализацию в классе запуска, чтобы во время выполнения функций azure внедрили экземпляр правильной реализации вашего интерфейса. Рассмотрим следующий пример функции azure, которая использует интерфейс ISqlHelper. Я пишу свой класс функции non-stati c следующим образом

public class NotifyMember
{
    private readonly ISqlHelper _sqlHelper;

    public NotifyMember(ISqlHelper sqlHelper)
    {
        _sqlHelper = sqlHelper ?? throw new ArgumentNullException(nameof(sqlHelper));

    }

    [FunctionName(nameof(NotifyMember))]
    public async Task Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "multipliers/{id:guid}")] HttpRequest req,
      string id, ILogger logger)
    {//Perform function work here}
}

И регистрирую свой экземпляр класса, который реализует ISqlHelper в моем классе запуска, как

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddTransient<ISqlHelper, SqlHelper>();
    }
}

Для получения дополнительной информации о том, как для этого обратитесь Внедрение зависимостей в Azure Функции

...