Я пытаюсь сделать строковое значение (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