标签:Autofac RegisterType builder actor var using NET IoC
1 前置阅读
在阅读本文章之前,你可以先阅读:
- 什么是依赖注入
2 简介
Autofac与C#语言的结合非常紧密,并学习它非常的简单,也是.NET领域最为流行的IoC框架之一。
3 使用
首先,将Autofac的NuGet软件包安装到您的应用程序中。
Autofac
然后,我们通过创建ContainerBuilder来注册组件。
var builder = new ContainerBuilder();
builder.RegisterType<Knife>();
builder.RegisterType<Actor>();
接着,可以通过在一个已存在的生命周期上调用 BeginLifetimeScope() 方法来创建另一个生命周期作用域, 以根容器作为起始。生命周期作用域是可释放的并且追踪组件的释放, 因此确保你总是调用了 "Dispose()"" 或者把它们包裹在 "using" 语句内。
using (var scope = container.BeginLifetimeScope())
{
}
最后,在注册完组件并暴露相应的服务后, 你可以从创建的容器或其子生命周期中解析服务. 让我们使用 Resolve() 方法来实现:
using (var scope = container.BeginLifetimeScope())
{
var actor = scope.Resolve<Actor>();
actor.Kill();
}
让我们来看看完整代码:
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();
}
}
}
让我们来看看输出结果:
小明用刀杀怪
4 在 Asp.Net Core 中使用
首先,将Autofac,Autofac.Extensions.DependencyInjection的NuGet软件包安装到您的应用程序中。
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();
}
}
}
启动调试,让我们来看看输出结果:
小明用刀杀怪
标签:Autofac,RegisterType,builder,actor,var,using,NET,IoC 来源: https://www.cnblogs.com/songjuntao/p/15202367.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。