Добавить реестры структуры карты в Microsoft.Azure.Functions.Extensions.DependencyInjection - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь применить DI в Azure Function, прочитав этот блог . Внедренный сервис в Azure Function принадлежит другому проекту, который использует Structuremap для DI. Моя проблема заключается в том, что я не могу добавить реестры Structuremap в запуск функции Azure. Вот пример класса запуска

 public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.Configure();
    }
}

, и я попытался написать класс ContainerConfigurator (чтобы добавить эти реестры)

public static class ContainerConfigurator
{
    public static void Configure(this IServiceCollection services)
    {
        var container = new Container(config =>
        {
            config.Scan(s =>
            {
                s.LookForRegistries();
                s.WithDefaultConventions();
                s.TheCallingAssembly();
            });
            config.Populate(services);
        });

        return container;
    }
}

, а вот класс функции

public class FunctionX
{
    private readonly IXService _xService;

    public GetReports(IXService xService)
    {
        _xService = xService;
    }

    [FunctionName("GetX")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log)
    {
        log.LogInformation("Get x");

        return await Task.FromResult(new OkObjectResult("OK"));
    }
}

когда я тестирую конечную точку, я получаю сообщение об ошибке для решения проблемы "IXService". Я не знаю точно, что я скучаю. У кого-нибудь есть решение?

1 Ответ

0 голосов
/ 30 октября 2019

Я думаю, вам нужно явно зарегистрировать свой сервис в стартапах:

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddScoped<IXService, XService>();
    }
}

Даже DI поддерживается в функции Azure, но, очевидно, он немного отличается от ASP.NET Core.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...