在阅读本文章以前,你能够先阅读:web
Autofac与C#语言的结合很是紧密,并学习它很是的简单,也是.NET领域最为流行的IoC框架之一。框架
首先,将Autofac的NuGet软件包安装到您的应用程序中。ide
Autofac
而后,咱们经过建立ContainerBuilder来注册组件。学习
var builder = new ContainerBuilder(); builder.RegisterType<Knife>(); builder.RegisterType<Actor>();
接着,能够经过在一个已存在的生命周期上调用 BeginLifetimeScope() 方法来建立另外一个生命周期做用域, 以根容器做为起始。生命周期做用域是可释放的而且追踪组件的释放, 所以确保你老是调用了 "Dispose()"" 或者把它们包裹在 "using" 语句内。ui
using (var scope = container.BeginLifetimeScope()) { }
最后,在注册完组件并暴露相应的服务后, 你能够从建立的容器或其子生命周期中解析服务. 让咱们使用 Resolve() 方法来实现:this
using (var scope = container.BeginLifetimeScope()) { var actor = scope.Resolve<Actor>(); actor.Kill(); }
让咱们来看看完整代码:spa
using System; namespace Autofac.ConsoleApp { class Program { static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterType<Knife>(); builder.RegisterType<Actor>(); var container = builder.Build(); using (var scope = container.BeginLifetimeScope()) { var actor = scope.Resolve<Actor>(); actor.Kill(); } Console.ReadKey(); } } }
让咱们来看看输出结果:调试
小明用刀杀怪
首先,将Autofac,Autofac.Extensions.DependencyInjection的NuGet软件包安装到您的应用程序中。code
dotnet add package Autofac dotnet add package Autofac.Extensions.DependencyInjection
而后,在Program.Main中增长.UseServiceProviderFactory(new AutofacServiceProviderFactory())生命周期
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .UseServiceProviderFactory(new AutofacServiceProviderFactory());
接着,在Startup.ConfigureServices中增长services.AddControllersWithViews();
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Autofac.WebApi", Version = "v1" }); }); services.AddControllersWithViews(); }
接着,在Startup.ConfigureContainer方法中,将Knife,Actor注册到Autofac中ContainerBuilder。
public void ConfigureContainer(ContainerBuilder builder) { builder.RegisterType<Knife>(); builder.RegisterType<Actor>(); }
最后,增长HomeController,执行actor.Kill。
using Microsoft.AspNetCore.Mvc; using System; namespace Autofac.WebApi.Controllers { [Route("[controller]")] [ApiController] public class HomeController : Controller { private readonly Actor actor; public HomeController(Actor actor) { this.actor = actor ?? throw new ArgumentNullException(nameof(actor)); } [HttpGet] public string Get() { return actor.Kill(); } } }
启动调试,让咱们来看看输出结果:
小明用刀杀怪