Внедрить экземпляр DI непосредственно в метод функции (Azure Функции) - PullRequest
2 голосов
/ 13 февраля 2020

Я хочу внедрить экземпляры объектов непосредственно в Azure метод / тело функции следующим образом:

[FunctionName("StartJob")]
public async Task<IActionResult> Start(
    [HttpTrigger(AuthorizationLevel.Function, "Post", Route = "v1/job")] HttpRequest req,
    IStartJobHandler handler)
{
...

Но я получаю ошибку во время выполнения, когда я делаю это:

The 'StartJob' function is in error: Microsoft.Azure.WebJobs.Host: Error indexing method 'StartJob'. Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'handler' to type IStartJobHandler. Make sure the parameter Type is supported by the binding. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

Если я вставлю тот же экземпляр в конструктор - все хорошо. (Поэтому нет необходимости предлагать мне проверить мой класс запуска и так далее:))

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

Итак, вопрос заключается в следующем: могу ли я на самом деле внедрить пользовательские классы в azure методе функции напрямую, без написание дополнительного кода, например, ILogger:

[FunctionName("StartJob")]
public async Task<IActionResult> Start(
    [HttpTrigger(AuthorizationLevel.Function, "Post", Route = "v1/job")] HttpRequest req,
    ILogger logger)
{
...

Или это просто не поддерживается?

Спасибо.

1 Ответ

2 голосов
/ 14 февраля 2020

Внедрение собственного класса непосредственно в функцию невозможно, вам все еще нужно внедрить конструктор, чтобы реализовать свою идею. Если вы не решите внедрить конструктор, зависимости будут недоступны. Написание дополнительного кода необходимо. Это правильный путь:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#use -injected-зависимости

...