Autofac整合WebAPI
Autofac整合WebAPI
前面一节介绍了Autofac注入方式,这节介绍Autofac整合到WebAPI。
环境
Win10+VS2020+.NET 5.0 +Autofac 6.3.0
步骤
1.指定Autofac工厂替换默认工厂,Program指定。
2.在Startup类增加ConfigureContainer方法,注册映射关系。
3.通过控制器构造函数注入,获取实例。
实践
项目结构
在上节Autofac的注入方式的项目上改造。
替换默认工厂
修改Program的CreateHostBuilder方法。
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中注册的服务全部接管过来。
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16289000.html
欢迎各位大佬们评论指正
QQ讨论群:610129902