ASP.NET Core Web API 使用Autofac框架

news/2024/9/22 18:22:00/

总目录


前言

主要介绍如何在ASP.NET Core Web API 使用Autofac框架


一、创建ASP.NET Core Web API

我们先创建一个ASP.NET Core Web API项目,然后准备相关的代码

1 假如我们需要实现登录的功能,现在我们创建相关的服务接口

    public interface ILoginService{bool Login(string username, string password);}public class LoginService : ILoginService{public bool Login(string username, string password){return username == "admin" || password == "123";}}

2 创建一个登录的控制器

    [Route("api/[controller]")][ApiController]public class LoginController : ControllerBase{//构造函数注入private ILoginService _LoginService;public LoginController(ILoginService loginService){_LoginService = loginService;}[HttpGet]public bool Login(string name,string pwd){return _LoginService.Login(name, pwd);}}

3 在Main中注册登录服务
在这里插入图片描述
4 至此我们完成了一个登录的接口

当请求参数输入name= admin ,pwd =123的时候,返回true返回成功。
在这里插入图片描述

这是基于原生IOC的注册方式,如果我们需要替换掉原生的IOC容器该如何实现呢?下面就来介绍如何替换掉原生的IOC容器

二、引入相关Nuget程序包

在这里插入图片描述

二、将IOC容器替换为Autofac

1. 方式1

在这里插入图片描述

            builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());builder.Host.ConfigureContainer<ContainerBuilder>(builder => {//在这里进行组件的注册builder.RegisterType<LoginService>().As<ILoginService>(); //...其他组件的注册});

通过这两行代码就可以替换掉IOC容器,我们可以运行项目可以照常访问接口。

2. 方式2

1 定义一个AutofacModule类,然后重写Load方法,将所有的注册全部写在Load方法中

    public class AutofacModule : Module{protected override void Load(ContainerBuilder builder){//把服务的注入规则写在这里builder.RegisterType<LoginService>().As<ILoginService>();}}

2 在Main中配置容器
在这里插入图片描述

            builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>{containerBuilder.RegisterModule<AutofacModule>();});

方式2 相较于 方式1 ,将注册的模块,单独隔离出来,有利于代码的整洁,避免主程序Main中 有太多的注册代码,变得臃肿。


结语

希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


参考资料:
ASP.NET Core 6.0 中使用 Autofac
.NET Core6.0环境下使用Autofac框架对webAPI进行依赖注入改造
ASP.NET Core 6.0 关于Autofac 使用


http://www.ppmy.cn/news/1509158.html

相关文章

【面试宝典】java多线程面试题总结(上)

一、线程和进程的区别&#xff1f; 进程和线程是操作系统中的两个重要概念&#xff0c;它们之间存在着明显的区别。以下是对进程和线程区别的详细阐述&#xff1a; 1、定义与基本单位 进程&#xff08;Process&#xff09;&#xff1a;进程是计算机中的程序关于某数据集合上…

其他浏览器正常,火狐浏览器ui-grid换行问题

ui-grid火狐浏览器兼容性问题 ui-grid表格插件问题描述解决方案 ui-grid表格插件 火狐浏览器 UI-grid 兼容性问题 其他如Edge、谷歌、360浏览器正常情况下 火狐浏览器 问题描述 如上图一和图二显示&#xff0c;UI-gird在火狐换行了&#xff1a;从图片来看&#xff1b;后面…

快乐数 | LeetCode-203 | 一个简单的数学题!| Floyd判圈算法练习题 | 哈希集合 | 数学

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;如果不知道Floyd判圈算法这道题做起来一点也不快乐&#xff01;&#x1f388;前置知识&#xff1a;图解Floyd判圈算法 | 判断链表或者迭代函数是否有环…

杂项复现-中间件

一、Apache HTTPD 多后缀解析漏洞 一、Apache HTTPD 多后缀解析漏洞 在有多个后缀的情况下&#xff0c;只要一个文件含有.php后缀的文件即将被识别成PHP文件&#xff0c;没必要是最后一个后缀。利用这个特性&#xff0c;将会造成一个可以绕过上传白名单的解析漏洞。 1、上传一个…

Qt ts文件详解

Qt ts文件&#xff08;Translation Source file&#xff1a;翻译源文件&#xff09;是Qt框架中用于存储翻译文本和相关上下文信息的一种特定格式文件&#xff0c;它是Qt Linguist&#xff08;语言家&#xff09;工具使用的基础。Qt Linguist是Qt开发工具包中的一个应用程序&…

设计LRU缓存结构

设计LRU(最近最少使用)缓存结构&#xff0c;该结构在构造时确定大小&#xff0c;假设大小为 capacity &#xff0c;操作次数是 n &#xff0c;并有如下功能: 1. Solution(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 2. get(key)&#xff1a;如果关键字 key 存在…

Dcoker网络

Docker网络 一、桥接模式&#xff08;默认&#xff09; 1、概念 桥接模式&#xff1a;部署好docker服务&#xff0c;启动之后&#xff0c;创建一个虚拟网桥&#xff08;docker0&#xff09;&#xff0c;docker0是一个虚拟的网络设备&#xff0c;类似于交换机。每一次运行容器…

day27 贪心算法-基础+发饼干+摆动序列+最大子序和

## 8. Greedy ### 8.1 introduction 核心&#xff1a;通过局部最优达到全局最优。 ### 8.2 455. Assign Cookies Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each child i has a …