DI是实现面向切面和面向抽象的前提

DI越来越重要

DI就是依赖注入,现在来说,大部分框架都是以DI为基础组件的,每一个框架都有自己的DI组件,像dotnet core,java spring等,也都为自己的框架量身打造了DI工具。

面向对象的几个原则

  • 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念)。

  • 控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。

  • 依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式)。

  • IoC容器:依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架)。

DI的作用

在很多教程里,DI与IOC基本是相同的概念,其实DI是IOC的具体实现,而我们说的autofac,spring ioc,unity castle都是DI框架,也叫做ioc容器!它们的作用就是统一管理对象,这个管理也包括了对象的产生和销毁,产生就是new出一个对象,销毁就是对象的生命周期,一般来说根据生命周期的范围,可以分为瞬间(用完就销毁),单次http请求(请求结束后销毁)和单例(应用程序重启时销毁),我们根据对象的功能去定义它们,例如一个日志组件,它可以被定义为单例的;而一个仓储对象,它需要定义成'瞬间销毁'的。

DI在公用组件里的表现

公用组件,它可能是一个公用的架构,为了完成某个功能而被设计出来的稳定的框架,它内部的工作流程相对固定,而实现的具体细节可以由开发人员根据项目自定义,要想实现这种设计 ,我们就想到了面向抽象的设计,即面向接口的编程,组件里的对象都是抽象定义的,并且不负责生产对象,因为只要生命就是具体的,所以这里的对象都是需要通过DI产生的!

我们用到的太多框架都是这种设计,大家有时间 可以 看看它们的源代码:

  • .net identity4

  • .net abp

  • java springboot

  • java spring security

设计一个授权框架

Lind.Authorization是一个授权架构体系,主不但有授权的核心逻辑,而且也是面向接口的体现,授权的核心逻辑是固定的,TokenAuthenticationFilter是一种业务场景的功能组件,它的主逻辑不能修改,但里面的每块内容可以根据项目自身去实现,这类型于模板方法模式,它规定的业务流程,开发人员根据具体业务去实现里面的细节。

Lind.Authorization组成

  • IUserDetails授权实体接口,可能是用户表,账户表等

  • IUserDetailsService授权实体业务接口,规定了授权时需要的方法,具体项目需要去实现它

  • IUserDetailsAuthenticationProvider授权提供者接口,实现了基本的授权业务代码,具体项目可以覆盖它的方法

  • TokenAuthenticationFilter基于token的授权过滤器,主要实现了对请求方法的拦截,它是授权的入口

  • TokenUserDetailsAuthenticationProvider为token过滤器实现的授权管理者,提供一些公开的方法,使用者可以继承它,根据自己需要重写里面的方法

TokenAuthenticationFilter认证的过程

下面看一下授权组件的依赖关系:

TokenAuthentictokenationFilter
>
IUserDetailsAuthenticationProvider
>
IUserDetailsService
>
IUserDetails

开发人员如果希望在自己项目中使用它,最少要实现这种个接口

IUserDetailsService:用户获取,token生成,token获取
IUserDetails:用户实体

原文地址:https://www.cnblogs.com/lori/p/10623248.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CQOI2017] 老C的任务(差分 + 树状数组 / K-D tree)

problem luogu-P3755 solution 这题第一眼矩阵内的点权值和,马上就是 K-D tree\text{K-D tree}K-D tree 不过脑子的敲。 这其实就是个二维数点问题,完全可以树状数组。 将矩阵差分成四个以原点为左下角的矩阵。 然后将基站按 xxx 轴排序&#xff0…

.net core 并发下的线程安全问题

抱歉,其实内容并不如题!!!背景(写测试demo所出现的异常,供大家学习与拍砖):.net core webapi项目,做了一个授权的filter(真正的生产项目的话,JWT很…

cf1555B. Two Tables

cf1555B. Two Tables 题意: 一个大矩阵空间内放置一个矩阵a,现在要再往这个空间内放一个矩阵b,a移动距离len才能放下b,问len最小是多少 题解: 不难发现左右或上下移动是最佳的,斜着移动是最不好的。此时…

cf1555C Coin Rows

cf1555C Coin Rows 题意: 有一个两行m列的地图,每个格子都有对应的价值,有a,b两个人,都从左上角到右下角,且都只能向右向下走,a先出发,a每到一个格子,就会获得这个地方…

C#并行编程(2):.NET线程池

线程 Thread在总结线程池之前,先来看一下.NET线程。.NET线程与操作系统(Windows)线程有什么区别?.NET利用Windows的线程处理功能。在C#程序编写中,我们首先会新建一个线程对象System.Threading.Thread,并为其指定一个回调方法&…

[CQOI2015] 任务查询系统(主席树)

problem luogu-P3168 solution 主席树板题。 将一个任务拆成 lil_ili​ 秒开始,ri1r_i1ri​1 秒结束的两个任务。 但不建议以每一秒作为一个主席树版本,因为一秒中可能有若干个任务开始或结束。 不妨将所有任务按时刻排序,然后以每个任…

ASP.NET Core launchsettings.json文件(8)《从零开始学ASP.NET CORE MVC》:

本文出自《从零开始学ASP.NET CORE MVC》推荐文章:ASP.NET Core 进程外(out-of-process)托管ASP.NET Core launchsettings.json文件在本视频中,我们将讨论在ASP.NET Core项目中launchsettings.json文件的重要性。launchsettings.json文件您将在项目根文件…

[CQOI2017] 老C的方块(网络流染色建图)

problem luogu-P3756 solution 据说要做网络流 24\text{24}24 题中的《方格取数问题》和《骑士共存问题》。 ???那个不是直接最小割吗?哦原来是从黑白染色来理解的。我还是太水了。 这种题之所以能用网络流做,是因…

cf1555D. Say No to Palindromes

cf1555D. Say No to Palindromes 题意: 给出一个字符串,长度为n,而且都是a,b,c三个字符构成的,然后有m个询问 每个询问给出l r,问要想这个区间内任意长度字串都不是回文子串,至少要改多少个字符 题解&am…

江湖召集:.NET开发者们看过来,这场长沙的开发者技术大会正是为你精心准备的大餐...

看过去,历史的尘埃与沧海桑田古语有云“近代中国,湖南独撑半边天”,湖南长沙,作为湖南省的省会,自古以来便是各界风云人士兴起之地。随着互联网时代的到来,长沙,这座历史悠久的文化名城&#xf…

[HEOI2012] 朋友圈(最大团 + 结论 + 二分图 + 网络流)

problem luogu-P2423 solution 本题即求无向图最大团问题。这是个 NP hard\text{NP hard}NP hard 问题,所以必须从图的特殊性质出发,否则只能暴搜。 异或运算等价于二进制下不进位的加法运算。 observation1:\text{observation1}:observation1: AAA …

cf1555 E. Boring Segments

cf1555 E. Boring Segments 题意: 给你n个线段,最大点是m,每一个线段有一个权值w,你能选择线段来覆盖1-m这个区间的,选择的代价为最大权值和最小权值的差。问你最小的的代价是多少。 题解: 尺取线段树 …

C#并行编程(3):并行循环

初识并行循环并行循环主要用来处理数据并行的,如,同时对数组或列表中的多个数据执行相同的操作。在C#编程中,我们使用并行类System.Threading.Tasks.Parallel提供的静态方法Parallel.For和Parallel.ForEach来实现并行循环。从方法名可以看出&…

[NOI Online 2022 提高组] 丹钓战(单调栈 + 树状数组 / 主席树)

problem luogu-P8251 solution 按照题意模拟单调栈。 求出对于 iii 而言,当时单调栈的栈顶元素记为 pip_ipi​。 如果到 iii 时,栈顶已经为 pip_ipi​ 了,意味着这中间的所有元素要么是被 iii 弹出,要么就是被 iii 前面的某些…

Acwing 252. 树

Acwing 252. 树 题意: 给定一个有 N 个点(编号 0,1,…,N−1)的树,每条边都有一个权值(不超过 1000)。 树上两个节点 x 与 y 之间的路径长度就是路径上各条边的权值之和。 求长度不超过 K 的路径有多少条…

.net 4.5部署到docker容器

.NET FX 应用程序也是可以容器化的,容器化的选项有两个:部署到windows容器部署到linux容器部署到windows容器由于.net本身就是运行在windows平台的,所以它与windows容器也是更加适合,你可以以iis镜像为基础,去编写你的…

[NOI Online 2022 提高组] 讨论(巧妙的切入方式)

problem luogu-P8252 solution 本题最难处理的就是两个人会做的题目集合是包含关系的限制。 将所有人按会做的题数从大到小排序。 然后枚举 iii,只要这个人和之前某个人存在有至少一道公共的题目,并且保证这个人有新的题目,那么这两个人…

P4149 [IOI2011]Race

P4149 [IOI2011]Race 题意: 给一棵树,每条边有权。求一条简单路径,权值和等于 k,且边的数量最小。 题解: 用t[i]:长度为i的路径包含的最少边数 按照子树顺序,依次用dep[u]t[K-d[u]]更新ans,…

将传统 WPF 程序迁移到 DotNetCore 3.0

介绍由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍显然是不现实的,但是 DotNetCore 是未来发展的趋势。所以本文通过以 WPF 为例&#xff…

[CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r],最后一个元素 ara_rar​ 一定不会被操作。 observation2:\text{observation2}:observation2: 基于上一条进一步地有,对于一个非空子段…