首页 > 解决方案 > 将结构映射注册表添加到 Microsoft.Azure.Functions.Extensions.DependencyInjection

问题描述

我尝试通过阅读此博客将 DI 应用到 Azure Function 中。Azure Function 中的注入服务属于另一个使用 Structuremap for DI 的项目。我的问题是我无法将 Structuremap 注册表添加到 Azure Function Startup。下面是一个 Startup 类的例子

 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”问题的错误消息。我不知道我到底想念什么。有没有人有任何解决方案?

标签: c#dependency-injectionazure-functionsstructuremap4

解决方案


我认为您需要在初创公司中明确注册您的服务:

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

Azure 功能甚至支持 DI,但显然它与 ASP.NET Core 差别不大。


推荐阅读