ASP.NET Core DI概述

来源:https://www.cnblogs.com/ccaa/archive/2020/01/16/12203591.html
-Advertisement-
Play Games

眾所周知,ASP.NET Core有一個DI框架,應用程式啟動時初始化。 預定義依賴 1: IApplicationBuilder:提供了配置應用程式的請求管道機制 2:ILoggerFactory:次類型提供了創建記錄器組件的模式 3:LHostinEnvironment:此類型提供管理應用程式運 ...


眾所周知,ASP.NET Core有一個DI框架,應用程式啟動時初始化。

  預定義依賴

1: IApplicationBuilder:提供了配置應用程式的請求管道機制

2:ILoggerFactory:次類型提供了創建記錄器組件的模式

3:LHostinEnvironment:此類型提供管理應用程式運行的Web宿主環境的信息。

  註冊自定義依賴

為了註冊類型,需要讓系統知道如何將一個抽象類型解析為一個具體類型,這種映射可以是靜態設定,也可以是動態的。

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<ICustomerService, CustomerService>();
        }

每當請求一個實現了ICustomerService的類型的實例時,系統返回CustomerService的一個實例,特別是,AddTransient方法確保了每次都會返回CustomerSerivce類型的一個新實例。

靜態解析有時候有一定的局限性。事實上,如果需要根據運行時條件將類型T解析為不同的類型,它允許指定一個回調函數來解析依賴

public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<ICustomerService>(provider=> {
                var context = provider.GetRequiredService<IHttpContextAccessor>();
                if (SomeRuntimeConditionHolds(context.HttpContext.User))
                    return new CustomerServiceMatchingRuntionCondition();
                else
                    return new DefaultCustomerService();
            });
        }

  收集配置數據

我們都知道之前的配置都是用web.config文件類獲取配置,那麼在Core中他們提供了一個更加豐富,複雜的基礎結構。

它配置是基於 名稱-值 對列表。1:Json數據提供程式,2:環境變數提供程式,3:記憶體提供程式。4:自定義配置提供程式。

關於自定義配置,我們需要實現一個IConfigurationSource介面的類,但是,在實現的時候,還需要引用一個集成自ConfigurationProvider的自定義類

public class MyDatabaseConfigSoure : IConfigurationSource
    {
      
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            throw new MyDatabaseConfigProvider();
        }
    }

public class MyDatabaseConfigProvider : ConfigurationProvider
    {
        private const string ConnectionString = "";
        public override void Load()
        {
            using (var db = new MyDatabaseContext(ConnectionString))
            {
                //..
            }
        }
    }

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Nginx原理解析 一、反向代理 工作流程 1. 用戶通過功能變數名稱發出訪問Web伺服器的請求,該功能變數名稱被DNS伺服器解析為反向代理伺服器的IP地址; 2. 反向代理伺服器接受用戶的請求; 3. 反向代理伺服器在本地緩存中查找請求的內容,找到後直接把內容發送給用戶; 4. 如果本地緩存里沒有用戶所請求的信息 ...
  • Nginx配置實例 一、反向代理 實例一 1、實現效果 打開瀏覽器,在瀏覽器地址欄輸入地址 www.123.com ,跳轉到linux系統tomcat主頁面中。 2、準備工作 在linux系統中安裝tomcat,使用預設埠8080 3、訪問過程分析 在瀏覽器地址欄輸入地址,請求nginx反向代理服 ...
  • 一、簡介詞雲圖是文本挖掘中用來表徵詞頻的數據可視化圖像,通過它可以很直觀地展現文本數據中地高頻詞:! 圖1 詞雲圖示例 在Python中有很多可視化框架可以用來製作詞雲圖,如pyecharts,但這些框架並不是專門用於製作詞雲圖的,因此並不支持更加個性化的製圖需求,要想創作出更加美觀個性的詞雲圖,需 ...
  • 設想一個需求:客服妹妹反饋有用戶線上發現了BUG,你拿來日誌分析,一個 200M 的日誌文件看的頭大,最後還是沒找到有用的信息,你終於決定開啟 DEBUG 日誌,重啟了項目,讓用戶再次操作一下,結果開了兩分鐘線上磁碟就告警了,於是你被運維人員痛批一頓,因為停生產環境又被 BOSS 大批一頓。 ...
  • 簡介: uncurl是一個庫,允許您將curl請求轉換為使用requests 的python代碼。由於Chrome網路檢查器具有的“copy as cURL”,因此該工具對於用python重新創建瀏覽器請求很有用。 安裝: (venv) zhangdeMacBook-Pro:pythonClass ...
  • 我們在找工作時,經常在招聘信息上看到有這麼一條:有構建大型互聯網服務及高併發等經驗,你第一時間想到的是媒體常說的雙十一嗎?帶著問題,我們一起思考技術…. 高併發高併發 它是互聯網分散式系統架構設計中必須考慮的因素之一,通常是指,保證系統能夠同時並行化處理海量請求 同步和非同步 同步:發送一個請求,等待 ...
  • 使用正則表達式替換字典數據 ${memberID} 對應的正則表達式 '\$\{.*\}'解釋:\$ 轉義替換字元串中 $ \{ 轉義替換字元串中 { . 除了\n中的任意單個自符 * 匹配*前面的字元零次或者多次 \} 轉義替換字元串中 } dict = {"memberId":"${member ...
  • 微信公眾號: "Dotnet9" ,網站: "Dotnet9" ,問題或建議: "請網站留言" , 如果對您有所幫助: "歡迎贊賞" 。 .NET CORE(C ) WPF亞克力窗體 閱讀導航 1. 本文背景 2. 代碼實現 3. 本文參考 4. 源碼 1. 本文背景 本文介紹使用FluentWPF ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...