AutoFac的使用总结
因为微软系都会内置许多现有技术(如依赖注入等),我也一直没有去学习第三方的,但是现在看来是有必要学习一下的。
1. 替换内置Ioc容器
引用Nuget AutoFac、Autofac.Extensions.DependencyInjection。
//Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices(service => service.AddAutofac()) //替换内置Ioc core3.0之前的版本
//.UseServiceProviderFactory(new AutofacServiceProviderFactory()) 替换内置Ioc core3.0之后的版本,参考1中有解释
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
//Startup.cs
//添加ConfigureContainer方法
public void ConfigureContainer(ContainerBuilder builder)
{
//采用模块方式
builder.RegisterModule(new AutofacModule());
}
//新建AutofacModule.cs文件
//“Module”引用至using Autofac
public class AutofacModule : Module
{
protected override void Load(ContainerBuilder builder)
{
//服务注入
}
}
2. 服务注入
//AutofacModule.cs
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<ArticleService>().As<IArticleService>(); //默认使用多例
builder.RegisterType<ArticleService>().As<IArticleService>().SingleInstance(); //单例注册
builder.RegisterType<ArticleService>().As<IArticleService>().InstancePerLifetimeScope(); //作用域注册
//UsingConstructor注册指定参数的构造函数
//默认注册构造函数参数最多的一项
builder.RegisterType<ArticleService>().As<IArticleService>().UsingConstructor();
//在Resolve阶段进行实例化,所以为单例注册
var instance = new ArticleService();
builder.RegisterInstance(instance).As<IArticleService>().ExternallyOwned();
//lambda注册,实现复杂参数
//c.Resolve<>,取出已经注入到容器的类型作为参数
builder.Register(c => new CommonService(c.Resolve<IArticleService>)).As<ICommonService>();
//注册多个实现
builder.Register<ICommonService>((c, p) =>
{
var number = p.Named<string>("number");
if (number == "1")
{
return new CommonService();
}
else
{
return new CommonService1();
}
});
//使用多个实现的注册
var common = _common.Resolve<ICommonService>(new NamedParameter("number", 1));
//反射服务注册
Assembly assembly = Assembly.GetExecutingAssembly();
builder.RegisterAssemblyTypes(assembly).Where(t => t.Name.EndsWith("Impl")).AsImplementedInterfaces();
}
3. 扩展
https://blog.csdn.net/wulex/article/details/78664612
4. 参考
分类:
ASP.NET Core
, AutoFac
标签:
ASP.NET Core
, AutoFac
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术