Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET6用起来-Autofac

.NET6用起来-Autofac

作者头像
李明成
发布于 2022-05-16 06:28:42
发布于 2022-05-16 06:28:42
1.4K00
代码可运行
举报
文章被收录于专栏:dotNET知音dotNET知音
运行总次数:0
代码可运行

本文的主角是Autofac,它是一款非常奈斯的依赖注入框架。暂时先不讨论,先分享几个名词:DI(依赖注入)、IOC(控制反转)、IOC容器

通过Demo,认识这些名词

Demo很简单,创建一个Asp.NET Core项目,新增一个用户服务类(UserService),在默认创建的天气预报(WeatherForecastController)控制器类中调用。

用户服务类(UserService),新增一个简单的GetUser方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public class UserService
    {

        public virtual string GetUser() 
        {
            Console.WriteLine("执行GetUser方法");
            return "获取一个用户信息";
        }
    }
天气预报(WeatherForecastController)控制器类调用

天气预报(WeatherForecastController)控制器类的get方法如果调用UserService的getUser方法,首先需要通过new创建UserService类的实例,才可以完成调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private readonly UserService _userService = new UserService();

那我们可以说天气预报类依赖用户服务类,这样代码实现没问题,软件设计原则,尽量依赖接口,不要依赖具体的实现。

下面创建一个接口类(IUserSerice)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface IUserSerice
    {
        string GetUser();
    }

换成接口后,实例化的代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private readonly IUserSerice _userService = new UserService();

我们发现天气预报类依赖用户服务类,用户服务类的实例化的代码都在天气预报类中,实例创建控制权在调用方中,软件设计中,大家常常说高内聚,低耦合,如何进一步解耦呢?把实例创建控制权交出去,这就是控制翻转(IOC)的思想。具体交给谁呢,这个东西像个黑盒,他就是ioc容器,.NETcore框架已经内置了ioc容器框架了,当然我们也可以使用第三方autofac框架。实例的创建,销毁整个生命周期交给了容器,如何获取到实例对象呢,可以通过注入的方式,把我们依赖的对象通过构造函数、属性、方法标记[FromServices]进行注入,这一个过程称为依赖注入(DI)。

我抛砖引玉下,更好的见解,留言区可以分享^_^

Autofac功能一角,也是吸引我的地方

  1. 丰富注册(服务组件与实现的配置)方式:①RegisterType、②RegisterAssemblyTypes、③Autofac.Module
  2. 注入方式:①构造函数、②属性
  3. 生命周期:①瞬时、②单例、③范围
  4. 支持AOP(面向切面编程)

Autofac与ASP.NET 6集成重写上面的Demo

1.安装nuget包:Autofac.Extensions.DependencyInjection
2.在Program.cs类中配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//替换内置的ServiceProviderFactory
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{   
    containerBuilder.RegisterType<UserService>().As<IUserSerice>().InstancePerLifetimeScope();
});
3.预报天气控制器类,注入、调用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private readonly ILogger<WeatherForecastController> _logger;
        private readonly IUserSerice userService;  
        public WeatherForecastController(ILogger<WeatherForecastController> logger
            , IUserSerice userService)
        {
            _logger = logger;        
            this.userService = userService;
        }

 

   [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            userService.GetUser();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }

运行结果

参考官网:https://autofac.readthedocs.io/en/latest/index.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 dotNET知音 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Castle DynamicProxy基本用法(AOP)
本文介绍AOP编程的基本概念、Castle DynamicProxy(DP)的基本用法,使用第三方扩展实现对异步(async)的支持,结合Autofac演示如何实现AOP编程。
拓荒者IT
2019/09/24
1.8K0
ASP.NET Core 依赖注入基本用法
ASP.NET Core从框架层对依赖注入提供支持。也就是说,如果你不了解依赖注入,将很难适应 ASP.NET Core的开发模式。本文将介绍依赖注入的基本概念,并结合代码演示如何在 ASP.NET Core中使用依赖注入。
拓荒者IT
2019/09/24
2.2K0
ASP.NET Core 依赖注入基本用法
【半小时大话.net依赖注入】(一)理论基础+实战控制台程序实现AutoFac注入
其中.Net Framework框架主要以如何引入AutoFac作为容器以及如何运用AuotoFac为主,.Net Core框架除了研究引入AutoFac的两种方式,同时也运用反射技巧对其自带的DI框架进行了初步封装,实现了相同的依赖注入效果。 项目架构如下图:
梁规晓
2019/07/15
1.6K0
【半小时大话.net依赖注入】(一)理论基础+实战控制台程序实现AutoFac注入
【 .NET Core 3.0 】框架之九 || 依赖注入 与 IoC
本文有配套视频:https://www.bilibili.com/video/av58096866/?p=5 前言 1、重要:如果你实现了解耦,也就是 api 层只引用了 IService 和
老张的哲学
2022/04/10
1.2K0
【 .NET Core 3.0 】框架之九 ||  依赖注入 与 IoC
Autofac 注入仓储模式
新建IUserService,类UserService,控制器UserController
Echo_Wish
2023/11/30
3000
Autofac 注入仓储模式
asp.net core 3.1/swagger
安装nuget包:Swashbuckle.AspNetCore.SwaggerUI和Swashbuckle.AspNetCore.Annotations,配置swagger:
雪飞鸿
2020/05/25
5940
Autofac入门与替代ASP.NET Core、ABP依赖注入容器
Autofac 官网文档地址: https://autofaccn.readthedocs.io/zh/latest/index.html
痴者工良
2021/04/26
1.9K0
dotNET Core 3.X 使用 Autofac 来增强依赖注入
在上一篇《dotNET Core 3.X 依赖注入》中简单介绍了 dotNET Core 框架本身的依赖注入功能,大部分情况下使用框架的依赖注入功能就可以满足了,在一些特殊场景下,我们就需要引入第三方的注入框架。
oec2003
2020/06/11
1.8K0
dotNET Core 3.X 使用 Autofac 来增强依赖注入
【愚公系列】2023年09月 .NET CORE工具案例-JMSFramework微服务框架(RemoteLog分布式日志)
分布式日志是一种系统,其中日志消息可以在多个节点之间进行分布和复制。这样可以实现高可用性和容错性,避免单点故障和数据丢失。
愚公搬代码
2025/06/01
510
【愚公系列】2023年09月 .NET CORE工具案例-JMSFramework微服务框架(RemoteLog分布式日志)
.net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍
在Asp.Net Core 上面由于现在前后端分离已经是趋势,所以asp.net core MVC用的没有那么多,主要以WebApi作为学习目标。
SpringSun
2023/06/09
2.5K0
.net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍
asp.net core之Options
本文将介绍 ASP.NET Core 中的 Options 概念和使用方法。Options 是一种配置管理机制,可以将应用程序的配置信息从代码中分离出来,提高代码的可维护性和可测试性。我们将详细介绍如何定义 Options 类、注册 Options、使用 Options,并提供相应的示例代码。此外,我们还将对 IOptions、IOptionsSnapshot、IOptionsMonitor、IConfigureNamedOptions、OptionsBuilder、IValidateOptions、PostConfigureOptions 等相关接口和类进行说明,并给出使用场景示例。
饭勺oO
2023/10/18
3830
asp.net core之Options
使用 autofac 实现 asp .net core 的属性注入
使用 autofac 代替 asp .net core 默认的 IOC 容器,可实现属性注入。
jgrass
2024/12/25
3080
使用 autofac 实现 asp .net core 的属性注入
ASP.NET Core 使用Autofac
属性介绍: RegisterAssemblyTypes:寄存器程序集类型 AsImplementedInterfaces:实现的接口 InstancePerDependency:实例依赖关系 PropertiesAutowired:属性自动连接(属性自动注入)
Echo_Wish
2023/11/30
3970
ASP.NET Core 使用Autofac
Refit使用入门
原文:Refit: The automatic type-safe REST library for .NET Core, Xamarin and .NET
吴晓阳
2024/11/22
1600
【愚公系列】2022年12月 .NET CORE工具案例-性能监控工具WatchDog的使用
所谓日志(Log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合。每个日志文件由日志记录组成,每条日志记录描述了一次单独的系统事件。通常情况下,系统日志是用户可以直接阅读的文本文件,其中包含了一个时间戳和一个信息或者子系统所特有的其他信息。
愚公搬代码
2022/12/07
5140
【愚公系列】2022年12月 .NET CORE工具案例-性能监控工具WatchDog的使用
ASP.NET Core 依赖注入(DI)简介
本文为官方文档译文 ASP.NET Core是从根本上设计来支持和利用依赖注入。 ASP.NET Core应用程序可以通过将其注入到Startup类中的方法中来利用内置的框架服务,并且应用程序服务也可以配置为注入。 ASP.NET Core提供的默认服务容器提供了一个最小的功能集,而不是替换其他容器。 什么是依赖注入? 依赖注入,英文是Dependency Injection一般简称DI,是实现对象与其协作者或依赖关系之间松散耦合的技术。为了执行其操作,类所需的对象不是直接实例化协作者或使用静态引用,
晓晨
2018/06/22
3.2K0
.NET 7 中 Autofac 依赖注入整合多层,项目中可直接用
1、安装Nuget包:Autofac.Extensions.DependencyInjection
郑子铭
2023/08/30
1.4K0
.NET 7 中 Autofac 依赖注入整合多层,项目中可直接用
ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 正文 上一篇我们说过ASP.NET Core中自带的IOC容器是属于轻量级的,功能并不是很多,只是提供了基础功能而已.. 所以今天我们主要讲讲如何采用Autofac来替换IOC容器,并实现属性注入 注意:本文需要读者理解DI IOC并使用过相关框架. 1.将默认的IOC容器替换为Autofac  首先,我们需要从nu
GuZhenYin
2018/03/30
1.2K0
ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
个人项目框架搭建 -- Autofac简单使用记录
1、添加autofac相关程序集/使用Nuget 2、引入命名空间 using Autofac; using Autofac.Configuration; 3、使用 3.1:直接使用 var build = new ContainerBuilder(); build.RegisterType<MemoryCacheManager>(); build.Register<ICacheManager>(c => new MemoryCacheManager()).InstancePerLifetimeScope(
易墨
2018/09/14
7690
.NET程序对接 OpenTelemetry logs
OpenTelemetry 是一个由 CNCF(Cloud Native Computing Foundation)托管的开源项目,旨在为观察性(Observability)提供一套全面的工具,包括度量(Metrics)、日志(Logs)和追踪(Traces)。它的目标是为所有类型的遥测数据提供一种标准化的方法。 OpenTelemetry 提供了一套 API 和 SDK,使得开发者可以在他们的应用程序中生成和收集遥测数据。此外,OpenTelemetry 还提供了一套收集器(Collector),可以接收、处理和导出遥测数据,以便于后续的分析和可视化。 本文不是用来介绍 OpenTelemetry 的,所以更多的细节就不提了。
MJ.Zhou
2024/06/04
2500
.NET程序对接 OpenTelemetry logs
推荐阅读
相关推荐
Castle DynamicProxy基本用法(AOP)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验