Autofac的基本使用
参考网址: https://blog.csdn.net/wushuitaolove/article/details/108669723
Autofac的使用
Autofac简介
基本的使用方式
如何实现webapi控制器自动注入接口
一、Autofac简介
Autofac是实现依赖注入的类库之一,他可以帮助你实现程序的解耦,所谓“上层模块不应依赖于底层模块,应当依赖于抽象,而不应依赖于细节”,哈哈,咱们说点白话吧,意思就是说顶层的模块不应直接依赖于底层模块以及具体的实现,应当有个抽象层在中间,只知道有什么方法就行, 具体怎么实现,细节不管,这样的好处在于解耦,顶层模块通过接口得到对应实现,不在乎到底是哪个具体对象,只要有这个方法就可以(接口嘛),可以任意更换接口对应实现,而不需要修改代码。
二、基本使用
使用方式如下
首先打开NuGet获取Autofac.Integration.WebApi,获取了之后,引用中会多出如下两个dll库
Autofac.dll(这个非常重要,主要使用它)
Autofac.Integration.WebApi.dll(这个在实现WebApi自动注入时需要)
//创建IOC容器构建对象
var builder = new ContainerBuilder();
//注册接口与具体实现的对应
builder.RegisterType<DatabaseA>().As<IDataBase>();
//创建容器——此时的容器中已有如上注册的映射关系
var container = builder.Build();
//通过容器注入接口,得到之前注册的具体实现
var db = container.Resolve<IDataBase>();
一个接口对应多个实现的使用
//创建IOC容器构建对象
var builder = new ContainerBuilder();
//注册同一接口对应多个实现,通过Named方法解决,加入关键字
builder.RegisterType<DatabaseA>().Named<IDataBase>("A");
builder.RegisterType<DatabaseB>().Named<IDataBase>("B");
//创建容器——此时的容器中已有如上注册的映射关系
var container = builder.Build();
//通过容器注入接口+关键字,得到之前注册的具体实现
var dbA = container.ResolveNamed<IDataBase>("A");
var dbB = container.ResolveNamed<IDataBase>("B");
WebApi中,使用Autofac自动注入控制器
跟Unity有所不同,Unity只要创建了正确的容器,在Application_Start
中配置一下即可,Unity设置方式如下所示:
//实例化容器,并注册接口对应的资源类
var container = new UnityContainer();
container.RegisterType<IProductRepository, ProductRepository>();
//设置依赖
config.DependencyResolver = new UnityDependencyResolver(container)
到此,发起Webapi请求时,webapi控制器中的接口就会被注入
Autofac的webapi接口自动注入
废话不多说,很简单,如下所示:
//创建容器构建对象
var builder = new ContainerBuilder();
//注册接口与实现的对应
builder.RegisterType<DatabaseA>().Named<IDataBase>("A");
builder.RegisterType<DatabaseB>().Named<IDataBase>("B");
//这点非常重要:将所有程序集加载进来
Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
//然后调用方法,将程序集中的所有webapi控制器注册到构建对象
builder.RegisterApiControllers(assemblies).PropertiesAutowired();
//创建容器——此时的容器中已有如上的注册映射关系,以及所有程序集中的webapi控制器的注册
var container = builder.Build();
//设置给依赖关系解析程序
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
此时,WebApi控制器已经可以自动注入接口
Autofac不需要给属性设置Dependency特性,就可自动实现注入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律