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<Startup>();

                }).UseServiceProviderFactory(new AutofacServiceProviderFactory());

 

 

 

注册映射关系

Startup的一个ConfigureContainer方法。

 

代码如下:

public void ConfigureContainer(ContainerBuilder builder)

        {

            builder.RegisterType<TestServiceA>().As<ITestServiceA>();

        }

 

 

构造函数注入

修改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<WeatherForecastController> _logger;

 

        public WeatherForecastController(ILogger<WeatherForecastController> logger, ITestServiceA serviceA)

        {

            _logger = logger;

            _serviceA = serviceA;

        }

 

        [HttpGet]

        public IEnumerable<WeatherForecast> 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中注册的服务全部接管过来

 

posted @ 2022-05-19 16:19  春光牛牛  阅读(177)  评论(0编辑  收藏  举报