Autofac是一个开源的轻量级的依赖注入容器,可自动选择使用构造函数注入或者属性注入。
浅浅记录Autofac
一、Autofac包引入
1、Autofac
2、Autofac.Extensions.DependencyInjection
二、Startup类中应用
1、ConfigureServices中返回注册的Autofac
// 注册Autofac
return RegisterAutofac(services);
2、创建RegisterAutofac类,TeasingDbContext数据库连接字符串,在appsettings.json配置。TeasingDbContext为上下文映射。
private IServiceProvider RegisterAutofac(IServiceCollection services) {
//创建注册组件/服务的构建器
var builder = new ContainerBuilder();
//将依赖的对象注入
builder.Populate(services);
//将新的模块注册进去,AutofacDI后面将会用反射进行程序集注入
builder.RegisterModule<AutofacDI>();
//初始化使用
builder.Register(c => {
var optionsBuilder = new DbContextOptionsBuilder<TeasingDbContext>();
optionsBuilder.UseSqlServer(Configuration.GetConnectionString("TeasingDbContext"));
return optionsBuilder.Options;
}).InstancePerLifetimeScope();
//注册DbContext
builder.RegisterType<TeasingDbContext>()
.AsSelf()
.InstancePerLifetimeScope();
//DI创建
var Container = builder.Build();
return new AutofacServiceProvider(Container);
}
三、程序集注入
1、新建类 AutofacDI 需要继承Autofac.Module作为一个容器,实现一次性程序集注入。
protected override void Load(ContainerBuilder builder) {
//程序集注入
builder.RegisterAssemblyTypes(GetAssemblyByName("TS.Repository"))
.Where(a => a.Namespace.EndsWith("Repository")).AsImplementedInterfaces();
}
public static Assembly GetAssemblyByName(String AssemblyName) {
return Assembly.Load(AssemblyName);
}
TS.Repository:是程序集名称
EndsWith(“Repository”):以Repository结尾的类
Assembly有三种加载程序集方式:
- Assembly.Load(“程序集名称”);
- Assembly.LoadFrom(“程序集名称.dll”);
- Assembly.LoadFile(“绝对路径”);
框架图
链接: link.
图片: 仅供参考
如有发现错误请联系微信:sunyong8860
看完视频或书籍后小结_.NET