autofac
Autofac.Extensions.DependencyInjection
Autofac.Extras.DynamicProxy
-
添加 Nuget 包引用
使用 Autofac 当然要添加 Autofac 的 Nuget 包,主要涉及到两个:
Autofac.Extensions.DependencyInjection 核心支持包
Autofac.Extras.DynamicProxy2 AOP 动态代理支持 -
配置 Autofac
首先需要需要配置 Autofac 的容器工厂。
IHostBuilder 定义了扩展依赖注入容器的扩展点:
UseServiceProviderFactory(),提供创建 Service Provider 的对象。
ConfigureContainer(),配置依赖注入容器
需要在Program中添加:
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
UseServiceProviderFactory 是用于注册第三方容器的入口
Autofac 提供了各种注册服务的方法,不是微软的 Addxxx() 方式,而是 Registerxxx() 方式。
直接贴代码
创建一个类,里面反射程序集
public class AutofacModuleRegister : Autofac.Module
{
protected override void Load(ContainerBuilder builder)
{
//获取项目绝对路径
var basePath = AppContext.BaseDirectory;
//获取到接口的两个dll
var servicedll = Path.Combine(basePath, "ceshisqlsugar.Service.dll");
if (!File.Exists(servicedll))
{
var msg = "Repository.dll和Services.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。";
throw new Exception(msg);
}
// 获取 Service.dll 程序集服务,并注册
var serviceAssembly = Assembly.LoadFrom(servicedll);
builder.RegisterAssemblyTypes(serviceAssembly)
.AsImplementedInterfaces()//是以接口方式进行注入,注入这些类的所有的公共接口作为服务(除了释放资源)
.InstancePerDependency()//默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
}
}
在Program中调用
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
var hostBuilder = builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
builder.RegisterModule(new AutofacModuleRegister());
});
这个代码可以直接拿去用(修改servicedll 中的dll改成自己的就行)

本文介绍了如何在.NET应用中通过Nuget包Autofac.Extensions.DependencyInjection和Autofac.Extras.DynamicProxy2实现依赖注入和AOP动态代理。首先,需要添加相关Nuget包并配置Autofac的容器工厂,然后在Program中注册服务和模块,通过反射加载程序集中的接口实现类。最后,展示了如何在HostBuilder中配置Autofac容器,确保每个请求都能获得新的服务实例。
1726

被折叠的 条评论
为什么被折叠?



