Autofac整合WebAPI


Autofac整合WebAPI

前面一节介绍了Autofac注入方式,这节介绍Autofac整合到WebAPI

环境

Win10+VS2020+.NET 5.0 +Autofac 6.3.0

步骤

1.指定Autofac工厂替换默认工厂,Program指定

2.Startup类增加ConfigureContainer方法,注册映射关系

3.通过控制器构造函数注入,获取实例

实践

项目结构

在上节Autofac的注入方式的项目上改造。

替换默认工厂

修改ProgramCreateHostBuilder方法。

public static IHostBuilder CreateHostBuilder(string[] args) =>

            Host.CreateDefaultBuilder(args)

                .ConfigureWebHostDefaults(webBuilder =>

                {

                    webBuilder.UseStartup();

                }).UseServiceProviderFactory(new AutofacServiceProviderFactory());

注册映射关系

Startup的一个ConfigureContainer方法。

代码如下:

public void ConfigureContainer(ContainerBuilder builder)

        {

            builder.RegisterType().As();

        }

构造函数注入

修改WeatherForecastController控制器,通过控制器构造函数注入,获取实例,代码如下:

[ApiController]

    [Route("[controller]")]

    public class WeatherForecastController : ControllerBase

    {

        private readonly ITestServiceA _serviceA;

        private static readonly string[] Summaries = new[]

        {

            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"

        };

        private readonly ILogger _logger;

        public WeatherForecastController(ILogger logger, ITestServiceA serviceA)

        {

            _logger = logger;

            _serviceA = serviceA;

        }

        [HttpGet]

        public IEnumerable Get()

        {

            _serviceA.Show();

            var rng = new Random();

            return Enumerable.Range(1, 5).Select(index => new WeatherForecast

            {

                Date = DateTime.Now.AddDays(index),

                TemperatureC = rng.Next(-20, 55),

                Summary = Summaries[rng.Next(Summaries.Length)]

            })

            .ToArray();

        }

    }

运行

运行程序,结果如下,发现了TestServiceA实例化了。

总结

通过实践发现Autofac结合WebAPI很简单。另外.NET Core自带的ServiceCollection注册的服务也可以让Autofac使用,因为Autofac在自己注册服务之前会先把ServiceCollection中注册的服务全部接管过来