Динамическое c служебное разрешение для функции, вызванной очередью azure - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь сделать строковое значение (clientName) доступным для любых служб, которым это необходимо через DI. У меня есть два. NET основных типа проектов, которые совместно используют сервисы: проект API и приложение функций azure. Хотя мне удалось найти решение на стороне API, о котором рассказано ниже, я не знаю, как добиться чего-то подобного в приложении функций. Вот основные c структуры, которыми я в идеале собираюсь поделиться

public interface IClientNameGetter
{
    string ClientName { get; }
}

Конфигурация DI на стороне API

public class WebApiClientNameGetter : IClientNameGetter
{
    public WebApiClientNameGetter(HttpContext httpContext)
    {
       httpContext.Request.Headers.TryGetValue("MyKey", out var clientNames);
       ClientName = clientNames.Count > 0 ? clientNames[0] : "default";
     }

    public string ClientName { get; private set; }
}



public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IClientNameGetter>(provider =>
     {
         var httpContext = provider.GetRequiredService<IHttpContextAccessor>().HttpContext;
         return new WebApiClientNameGetter(httpContext);
     });
}

Использование

Любой сервис или контроллер API может получить IClientNameGetter clientNameGetter, в качестве параметра конструктора и получить clientNameGetter.ClientName

Я хочу добиться аналогичного опыта в сторона приложения функций. Представьте, что я прочитал POCO из сообщения очереди, которое вызывает функцию azure.

class QueuePoco
{
    public string ClientName {get;set;}
}

Я ищу способ создания объекта IClientNameGetter и его инжекции как IClientNameGetter

...