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認證的過程
下面看一下授權組件的依賴關系:
TokenAuthentictokenationFilterIUserDetailsAuthenticationProvider
IUserDetailsService
IUserDetails
開發人員如果希望在自己項目中使用它,最少要實現這種個接口
IUserDetailsService:用戶獲取,token生成,token獲取IUserDetails:用戶實體
原文地址:https://www.cnblogs.com/lori/p/10623248.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的DI是实现面向切面和面向抽象的前提的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: eShopOnContainers 知多
- 下一篇: .net core 并发下的线程安全问题
