Могу ли я использовать промежуточное программное обеспечение для предоставления инъекций служб в функции Azure в .NET 5?

#dependency-injection #azure-functions #middleware

Вопрос:

Можно ли использовать промежуточное программное обеспечение в новейших функциях Azure (с .NET 5) для регистрации новой службы в DI, область действия которой ограничена вызовом функции?

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

В качестве альтернативы, могу ли я добавить службу или объект, который вводится в метод функции в качестве аргумента.

 // Method injection would look like this:
public Task MyFunction(FunctionContext context, ITenantSpecificService service)
{
   // service would be set in the middleware
}
 

Я могу вручную создать объект и добавить его в FunctionContext.Items , но это просто не так чисто, как использование встроенной в функции системы внедрения зависимостей.

Комментарии:

1. Задумывались ли вы о создании фабрики, которая может возвращать конкретную реализацию арендатора ? В этом случае вы зарегистрируете все реализации, относящиеся к конкретному клиенту ITenantSpecificService , при запуске, и ваш заводской метод вернет необходимый тип по мере необходимости для каждого запроса.

2. Я делал это в прошлом, но предпочел бы как можно глубже внедрить код, специфичный для клиента, в инфраструктуру.