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改成自己的就行)