DI для класса не разрешается в функции - PullRequest
1 голос
/ 27 мая 2020

Я настроил DI для функции Azure, но он не разрешится при запуске функции. Код, который у меня есть:

StartUp :

[assembly: FunctionsStartup(typeof(OmegaConnector.StartUp))]
namespace OmegaConnector
{
    public class StartUp : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();

            builder.Services.AddLogging();
            builder.Services.AddVehicleSearchCosmosDataProvider();
            builder.Services.AddScoped<IProcessSearchData, SearchProcessor>(); <- This one
        }
    }

IProcessSearchData:

public interface IProcessSearchData
 {
    Task<bool> ProcessData(string campaign);
 }

SearchProcessor:

public class SearchProcessor : IProcessSearchData
    {

        public async Task<bool> ProcessData(string campaign)
        {
            return true;
        }
    }

Функция:

 public OmegaConnectorFunction(ILogger<OmegaConnectorFunction> logger, IProcessSearchData searchProcessor)
        {

Я получаю сообщение об ошибке:

 Executed 'CatchCampaign' (Failed, Id=daef3371-fa4d-4d1f-abad-7ad343537872)
[27/05/2020 12:17:27] Microsoft.Extensions.DependencyInjection.Abstractions: Unable to resolve service for type 'OmegaConnector.Interfaces.IProcessSearchData' while attempting to activate 'OmegaConnector.OmegaConnectorFunction'.

Извините, если это слишком просто, но я просто не вижу, что у меня здесь не так. Я думаю, что у меня это настроено правильно, но, очевидно, нет. Кто-нибудь может увидеть, что мне нужно сделать?

Ответы [ 3 ]

1 голос
/ 28 мая 2020

См. Здесь: https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library

Пакеты Functions 3.x созданы с учетом. NET Core 3.1.

Попробуйте сохранить эти версии в syn c, чтобы не было проблем с совместимостью зависимостей.

1 голос
/ 27 мая 2020

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

Я не уверен, что вы сделали это из предоставленных вами примеров кода. Пример:

public class OmegaConnectorFunction
{
    private readonly ILogger _logger;
    private readonly IProcessSearchData _searchProcessor;

    public OmegaConnectorFunction(ILogger<OmegaConnectorFunction> logger, IProcessSearchData searchProcessor) 
    {
        _logger = logger;
        _searchProcessor = searchProcessor;
    }

    [FunctionName("OmegaConnectorFunction")]
    public async Task<IActionResult> Run([HttpTrigger] HttpRequest request) 
    {
        var campaign = await request.Content.ReadAsAsync<string>();

        _searchProcessor.ProcessData(campaign);

        return new OkResult();
    }
}
0 голосов
/ 27 мая 2020
public class OmegaConnectorFunction {
  private readonly IProcessSearchData _searchProcessor;

  public OmegaConnectorFunction(IProcessSearchData searchProcessor) 
  {
      _searchProcessor = searchProcessor;
  }

  [FunctionName("OmegaConnectorFunction")]
  public async Task<IActionResult> Run([HttpTrigger] HttpRequest request,  ILogger log) // ILogger is automatically imported  
  {
      var campaign = await request.Content.ReadAsAsync<string>();
      _searchProcessor.ProcessData(campaign);
      return new OkResult();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...