参考地址: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. Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进

    前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家 ...

  2. Zabbix 设置自动添加主机两种方法(自动注册、自动发现)

    在实际生产环境中,我们可能需要将很多台主机添加到 Zabbix Server 里,我们进行手动添加的话,会比较麻烦.费时,而且还容易出错.所以一般我们会设置主机自动注册.这样就比较方便. 官方文档链接 ...

  3. js 复制 标签中的内容 方法

    <span id='id'>hello world</span><input type='button' onClick='copy("id")' v ...

  4. oracle 主键生成策略-sequence序列+trigger触发器

    oracle中设置表的主键字段为自增序列(实例)1.首先创建一个表(如日志表) //删除库表中存在的日志表drop table S_LOG_INFO cascade constraints;//新建日 ...

  5. 谁在使用GPU?

    nvidia-smi命令可以查看GPU使用情况,但是只能看到占用每个GPU的进程ID.根据进程ID可以得到进程详情,进程详情中包括用户ID,根据用户ID可以获取用户名称,从而知道哪个用户在使用GPU. ...

  6. Linux 的一些命令记录

    FTP:https://www.cnblogs.com/leoxuan/p/8329998.html YUM:https://blog.csdn.net/allyli0022/article/deta ...

  7. 带你理解Xcode Derived Data

    什么是Xcode Derived Data?为什么它很重要呢? “Clean derived data”,当你遇到一些极其奇怪的构建问题时,你也许经常听到这句话. Derived Data是一个文件夹 ...

  8. LINUX内核CPU负载均衡机制【转】

    转自:http://oenhan.com/cpu-load-balance 还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在 ...

  9. Django类

    django 1.中间件   中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法, 如请求过来 执行p ...

  10. 防止xss攻击的前端的方法

    项目当中在进行安全测试的时候,遇到了xss的攻击,要求前端来做个防御,针对于遇到的xss攻击,做个总结 1.xss---存储型xss的攻击 前端只要在接收到后台数据的时候做个特殊字符的过滤,即可抵制攻 ...