参考地址:https://docs.autofac.org/en/latest/examples/index.html

1. nuget :Autofac.Extensions.DependencyInjection  Autofac.Extras.DynamicProxy

2.

using System.IO;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting; namespace DL.Admin
{
public class Program
{
public static void Main(string[] args)
{
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls("http://*:2020")
.UseStartup<Startup>();
});
}
}
}

3. 启动文件Startup.cs内部添加以下方法

 public void ConfigureContainer(ContainerBuilder builder)
{
//添加任何Autofac模块或注册。
//这是在ConfigureServices之后调用的,所以
//在此处注册将覆盖在ConfigureServices中注册的内容。
//在构建主机时必须调用“UseServiceProviderFactory(new AutofacServiceProviderFactory())”`否则将不会调用此。 builder.RegisterModule(new AutofacModuleRegister(Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath, new List<string>()
{ //批量构造函数注入
"DL.Service.dll",
})); builder.RegisterType<Log4netService>()
.As<ILogService>()
.PropertiesAutowired()//开始属性注入
.InstancePerLifetimeScope();//即为每一个依赖或调用创建一个单一的共享的实例 builder.RegisterType<JwtService>()
.As<ITokenService>()
.PropertiesAutowired()//开始属性注入
.InstancePerLifetimeScope();//即为每一个依赖或调用创建一个单一的共享的实例 }

3. 创建下面类,进行批量注入

using Autofac;
using Autofac.Extras.DynamicProxy;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Module = Autofac.Module; namespace DL.Utils.Autofac
{
public class AutofacModuleRegister : Module
{
public string RootPath { get; set; }
public List<string> DllFiles { get; set; }
public AutofacModuleRegister(string rootPath, List<string> dllFiles)
{
RootPath = rootPath;
DllFiles = dllFiles;
} protected override void Load(ContainerBuilder builder)
{
foreach (var dllFile in DllFiles)
{
var dllFilePath = Path.Combine(RootPath, dllFile);//获取项目绝对路径
builder.RegisterAssemblyTypes(Assembly.LoadFile(dllFilePath))//直接采用加载文件的方法
//.PropertiesAutowired()//开始属性注入
//.Where(t => t.Name.EndsWith("Service") || t.Name.EndsWith("Repository"))
.AsImplementedInterfaces()//表示注册的类型,以接口的方式注册不包括IDisposable接口
.EnableInterfaceInterceptors()//引用Autofac.Extras.DynamicProxy,使用接口的拦截器,在使用特性 [Attribute] 注册时,注册拦截器可注册到接口(Interface)上或其实现类(Implement)上。使用注册到接口上方式,所有的实现类都能应用到拦截器。
.InstancePerLifetimeScope();//即为每一个依赖或调用创建一个单一的共享的实例
} ////拦截器
////builder.Register(c => new AOPTest());
////注入类
////builder.RegisterType<UsersService>().As<UsersIService>().PropertiesAutowired().EnableInterfaceInterceptors(); ////程序集注入
//var IRepository = Assembly.Load("DL.IRepository");
//var Repository = Assembly.Load("DL.Repository");
//Assembly.GetExecutingAssembly();
////根据名称约定(仓储层的接口和实现均以Repository结尾),实现服务接口和服务实现的依赖
//builder.RegisterAssemblyTypes(IRepository, Repository)
// .Where(t => t.Name.EndsWith("Repository"))
// .AsImplementedInterfaces(); }
}
}

  4. Startup.cs的ConfigureServices 方法添加

 services.AddControllersWithViews()
.AddControllersAsServices();//这里要写

 4. Startup.cs的Configure 方法添加进行测试 

            using (var container = host.Services.CreateScope())
{
//ICacheService phone = container.ServiceProvider.GetService<ICacheService>();
//phone.Set<string>("1", "123");
ILogService log = container.ServiceProvider.GetService<ILogService>();
log.Debug(typeof(string), "mesg", new[] { "1", "2" }); //var str = phone.Get<string>("1"); IService.SysIservice.ISysAdminService sysAdminService = container.ServiceProvider.GetService<IService.SysIservice.ISysAdminService>(); var list = sysAdminService.GetListAsync();
}

  

.NET Core3.0 Autofac注入的更多相关文章

  1. .Net Core3.0依赖注入DI

    构建ASP.NET Core应用程序的时候,依赖注入已成为了.NET Core的核心,这篇文章,我们理一理依赖注入的使用方法. 不使用依赖注入 首先,我们创建一个ASP.NET Core Mvc项目, ...

  2. asp.net core3.0 mvc 用 autofac

    好久没有写文章了,最近在用.net core3.0,一些开发中问题顺便记录: 1.首先nuget引入 Autofac Autofac.Extensions.DependencyInjection 2. ...

  3. 最近的项目系之2——core3.0整合Autofac

    1.前言 core3.0与之前版本相比,有一些brokenchanges,那周边一些配套组件往往也难逃brokenchanges,Autofac也不例外.这里重点关注core整合Autofac,与之前 ...

  4. 06、NetCore2.0依赖注入(DI)之整合Autofac

    06.NetCore2.0依赖注入(DI)之整合Autofac 除了使用NetCore2.0系统的依赖注入(DI)框架外,我们还可以使用其他成熟的DI框架,如Autofac.Unity等.只要他们支持 ...

  5. ASP.NETCore 3.0 Autofac替换及控制器属性注入及全局容器使用

    1.Autofac基础使用 参考: https://www.cnblogs.com/li150dan/p/10071079.html 2.ASP.NETCore 3.0 Autofac 容器替换 需要 ...

  6. NET Core 3.0 AutoFac替换内置DI的新姿势

    原文:NET Core 3.0 AutoFac替换内置DI的新姿势 .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原 ...

  7. EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录

    前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...

  8. 在.net core3.0中使用SignalR实现实时通信

    最近用.net core3.0重构网站,老大想做个站内信功能,就是有些耗时的后台任务的结果需要推送给用户.一开始我想简单点,客户端每隔1分钟调用一下我的接口,看看是不是有新消息,有的话就告诉用户有新推 ...

  9. .NET Core3.0 日志 logging

    多年的经验,日志记录是软件开发的重要组成部分.没有日志记录机制的系统不是完善的系统.在开发阶段可以通过debug附件进程进行交互调试,可以检测到一些问题,但是在上线之后,日志的记录起到至关重要的作用. ...

随机推荐

  1. Spring Cloud Eureka 服务注册中心(二)

    序言 Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件 它主要包括两个组件:Eureka Server 和 Eureka Client Eureka Clie ...

  2. [Flutter] Windows桌面程序开发

    在今年5月的谷歌I/O 2019大会时, 谷歌就宣布了flutter已经支持全平台开发, 包括 android, ios, mac, linux, windows, web 等 . Flutter桌面 ...

  3. 基于Spark的电影推荐系统(推荐系统~4)

    第四部分-推荐系统-模型训练 本模块基于第3节 数据加工得到的训练集和测试集数据 做模型训练,最后得到一系列的模型,进而做 预测. 训练多个模型,取其中最好,即取RMSE(均方根误差)值最小的模型 说 ...

  4. NaN不等于NaN

    目录 原因 表达式计算 类型转换 总结 不知道这个小知识点用得多不多,曾经在书上看到过,所以有一些印象,前段时间顺手写出类似如下的代码 var result; if (parseInt('abc')= ...

  5. Attract队作品简介

    湖南师范大学  Attract队 荣获“航天宏图杯”PIE遥感图像处理软件二次开发大赛二等奖 作品名称:基于深度学习的遥感影像分类系统-以长沙市居住区分类为例 团队简介:周亮(指导老师).张慧(组长) ...

  6. PHP MySQLi 参考手册

    PHP MySQLi函数 PHP MySQLi是MySQL的增强版本,PHP7 已经废弃了MySQL扩展,全面推荐使用MySQLi或者PDO. MySQLi安装>>>>> ...

  7. JavaScript调用百度地图

    在网站开发过程中,经常会调用到地图,百度地图提供Web开发.Android开发.iOS开发API及SDK,百度地图JavaScript API可帮助您在网站中构建功能丰富.交互性强的地图应用,本篇博客 ...

  8. FFT之频率与幅值的确定(转)

    FFT之后得到的是什么数 FFT之后得到的那一串复数是波形对应频率下的幅度特征,注意这个是幅度特征不是复制,下面要讲两个问题:1.如何获取频率,2.如何获取幅值 获取频率 FFT变换如何获取频率?傅里 ...

  9. maven 学习---Maven 编译打包时如何忽略测试用例

    本文地址:http://blog.csdn.net/wirelessqa/article/details/14057305 跳过测试阶段: mvn package -DskipTests 临时性跳过测 ...

  10. 图解Java数据结构之双向链表

    上一篇文章说到了单链表,也通过案例具体实现了一下,但是单链表的缺点也显而易见. 单向链表查找的方向只能是一个方向 单向链表不能自我删除,需要靠辅助节点 而双向链表则能够很轻松地实现上面的功能. 何为双 ...