.Net 5 中的 Azure 函数——依赖注入

作者 : 慕源网 本文共1772个字,预计阅读时间需要5分钟 发布时间: 2021-10-28 共488人阅读

在我之前的条目中,我们讨论了Azure Function 与 .Net 5 和隔离进程。在那篇文章中,我们讨论了Startup.cs类的存在,它是函数执行的入口点和负责执行的进程。

在这个类中,我们可以找到作为应用程序入口点的Main方法。在这里,我们找到了 使用Run 方法执行的变量HostBuiler的初始化。

Microsoft.Extensions.Hosting命名空间为我们提供的扩展方法中,我们找到了ConfigureServices方法,在这里我们可以进行依赖注入。此方法期望接收服务集合 ( IServiceCollection )的类型为Action的委托,该委托允许我们配置要注入的服务。

所以这就是我们可以通过 lambda 表达式传递我们希望作为参数注入到我们的函数中的不同服务的地方。

.ConfigureServices(services => {
    services.AddHttpClient("Swapi", configuration => {
        configuration.BaseAddress = new Uri(Environment.GetEnvironmentVariable("SwapiUrl"));
    });
    services.AddDbContext<DemoDatabaseContext>(options => {
        options.UseSqlServer(Environment.GetEnvironmentVariable("DbConnectionString"));
    });
    services.AddTransient<IStoreBll, StoreBll>();
})

给我们留下一个Main类,例如:

using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Demo.LatinoNet.AzFunNet5.Business;
using Demo.LatinoNet.AzFunNet5.Models;
namespace Demo.LatinoNet.AzFunNet5
{
    public class Program
    {
        public static void Main()
        {
            var host = new HostBuilder()
                .ConfigureFunctionsWorkerDefaults()
                .ConfigureServices(services => {
                    services.AddHttpClient("Swapi", configuration => {
                        configuration.BaseAddress = new Uri(Environment.GetEnvironmentVariable("SwapiUrl"));
                    });
                    services.AddDbContext<DemoDatabaseContext>(options => {
                        options.UseSqlServer(Environment.GetEnvironmentVariable("DbConnectionString"));
                    });
                    services.AddTransient<IStoreBll, StoreBll>();
                })
                .Build();
            host.Run();
        }
    }
}

一旦为我们的函数配置了服务,我们现在可以像往常一样在类的构造函数中注入依赖项:

public class Function1
{
    private readonly IHttpClientFactory _httpClientFactory;
    private readonly DemoDatabaseContext _context;
    private readonly IStoreBll _storeBll;
    public Function1(IHttpClientFactory httpClientFactory,
        DemoDatabaseContext context,
        IStoreBll storeBll)
    {
        _httpClientFactory = httpClientFactory;
        _context = context;
        _storeBll = storeBll;
    }
    ...

慕源网 » .Net 5 中的 Azure 函数——依赖注入

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录