vue中使用element2

阻止谷歌下記住密碼

當我們將input框的類型設置為密碼框的時候,就會出現下面這種效果,不僅樣式不統一,有的時候,密碼框的上面並不是用戶名,而是其他的內容,也會被強制显示為用戶名:

 首先需要解決樣式問題:

 #app input:-webkit-autofill {
    -webkit-text-fill-color: #fff !important;
    -webkit-box-shadow: none !important;
    background-color: transparent;
    background-image: none;
    transition: background-color 999999s ease-in-out, color 999999s ease-in-out;
  }

 其次,阻止谷歌自帶的記住密碼:

 回車重定向

 單個el-input獲得焦點時,點擊鍵盤迴車,會觸發路由重定向。

解決方法:@submit.native.preven t阻止表單默認事件

 日期時間框的默認值在IE無法清除

element的日期框添加默認值后,在ie下,默認的清空按鈕無法清空默認日期值:

 

 

 數據應該是已經清空了,但是DOM沒有刷新,所以需要強制刷新DOM:

 

 自定義表頭

<template>
    <div>
        <el-table-column
            v-for="(item, idx) in list"
            :key="idx"
            v-bind="item" :show-overflow-tooltip="true">
            <tHeader
                v-if="item.children"
                :list="item.children">
            </tHeader>
        </el-table-column>
    </div>
</template>
<script>
export default {
    name: 'tHeader',
    props: [
        'list'
    ],
    methods: {
        repairEleSortBug() {
            this.list.unshift(this.list.pop());
        }
    },
    
    created() {
            //修復elementUI排序倒置的bug(將數組最後一個放到第一個)
        this.repairEleSortBug();
    }
};
</script>

 

 

 

 對象監聽

在vue中可以通過監聽一個變量的值變化觸發相應事件,但是當需要監聽的變量是個複雜對象時,通常在外出是監聽不到對象裏面值的變化,這時就需要深度監聽:

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

澳洲野火燒破千人家園 雪梨收災難性警告

摘錄自2019年11月11日ETtoday 綜合報導

澳洲東部森林野火自8日起延燒多日,造成3人死亡、數十人受傷以及上千人失去家園,仍在燃燒的上百處火場燒掉了至少150棟的住宅。當局指出,恐怕連雪梨及周邊地區也會受影響,12日將迎接「災難性」野火威脅。

外電報導,新南威爾斯州(New South Wales)及昆士蘭州(Queensland)等地接連傳出災情,當局派出將近1300名消防員也沒能撲滅燒了4天的大火,只能宣布災區進入「緊急狀態」,並警告人口最多的雪梨地區,高溫恐飆破攝氏37度,要面臨「災難性」(catasrophic)的野火威脅。

這也是澳洲2009年推出新的「火情危險評級制度」(Fire Danger Rating,分為中等、高、非常高、嚴重、極高及災難性)後,雪梨第一次面臨「災難性」等級,預計12日雪梨會出現攝氏37度高溫、強風、乾燥等,不排除比澳洲東部當初被野火襲擊時更嚴重。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

非洲黑猩猩擄走人類小孩 源自於棲地銳減

摘錄自2019年11月12日ETtoday綜合報導

非洲烏干達黑猩猩原始棲地逐年喪失,引爆人類與猩猩之間的激烈衝突。《國家地理》雜誌網站近日報導,當地黑猩猩為了覓食,不僅破壞農作物,甚至學會對人類發動攻擊;當地自2014年以來,已經發生多起兒童遭猩猩擄走事件,其中一人甚至被猩猩開膛剖肚,內臟還被吃掉。

在野外,雄性黑猩猩有時會獵捕其他猴子或山羊,並食用獵物的肉果腹;他們雖然對人類保持警覺心,但這也使他們變得更具侵略性。自從2014年以來,陸續發生多起孩童遭黑猩猩攻擊事件,造成至少3人死亡,另有至少6人受傷。目前還無法確定黑猩猩為何突然開始襲擊人類兒童,但據信與烏干達西部自然棲地逐漸被農田侵蝕有關。

烏干達野生動物管理局(UWA)表示,當局已經意識到猩猩攻擊兒童的問題,但面對黑猩猩的棲地森林和自然家園遭破壞也感到無能為力,理由是人們普遍認為開闢農地來維持生計,比起保育森林更加重要。

據悉,非洲大陸大約只剩下30萬頭野生黑猩猩,烏干達野生動物管理局考慮透過一系列教育性活動,向人們宣導保育森林的重要性。

 

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

水上太陽能火災 消防車要用特別款──千葉・山倉風災事件啟示錄

文:宋瑞文(加州能源特約撰述)

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

稀有越南老鼠鹿 近30年首度現蹤

摘錄自2019年11月12日中央通訊社綜合報導

一種外觀似鹿、大小相當於兔子或貓的小型哺乳類動物銀背鼷鹿(越南老鼠鹿),在失去蹤跡近30年後,近日首度在越南被發現。專家多年來認為此物種已瀕臨絕種。

根據今天發布在「自然生態學與進化」(Nature Ecology and Evolution)期刊的研究報告,紀錄顯示,越南老鼠鹿(Silver-backed Chevrotain,或Mouse deer)最後一次現蹤是在1990年。由於自1990年起即未有發現越南老鼠鹿的紀錄,專家推測此物種已因人類過度獵捕而瀕臨絕種。

由於人口成長和經濟開發對東南亞的樹林構成巨大生存壓力,生物學家堤爾克指出,保育工作必須搶占先機。根據聯合國「政府間生物多樣性與生態系服務科學政策平台」(IPBES)5月發布的報告,人類活動對地球的衝擊,導致高達100萬個物種瀕臨絕種。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※幫你省時又省力,新北清潔一流服務好口碑

※別再煩惱如何寫文案,掌握八大原則!

增近四倍 2015年Q1中國純電動車銷量達1.54萬輛

近日,中國汽車工業協會發佈最新統計資料顯示,今年第一季,中國汽車銷售達615.3萬輛,與去年同期相比增長3.9%,但相較去年同期9.2%的增幅,下滑明顯。此外新能源汽車產銷分別為2.73萬輛和2.66萬輛,與去年同期相比分別增長2.9倍和2.8倍。   其中,純電動車型銷售1.54萬輛,與去年同其相比增長3.7倍;插電式混合動力車型銷售1.12萬輛,與去年同期相比增長2.1倍。與新能源汽車相比,傳統車型銷量增幅卻明顯回落。根據資料,一季度乘用車共銷售530.51萬輛,與去年同其相比增長8.95%,增幅比去年同期回落1.14個百分點。在乘用車四類車型中,轎車銷量與去年同期相比下滑0.4%。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

歐洲純電動車市場熱絡 銷量同比勁增 73%

據《歐洲汽車新聞》報導,去年歐洲市場純電動車的銷量超越插電式混合電動車,不過今年由於車企將推出更多插電式混合車型,因此其銷量有可能超越純電動車。    歐洲汽車製造商協會 ACEA 數據顯示,2014 年在歐盟及自由貿易聯盟國家(EFTA)市場中,純電動車銷量同比勁增 73% 至 58,244 輛,插電式混合電動車及增程式電動車的銷量同比攀升 26% 至 39,547 輛,銷量最高的電動車為日產聆風,而該地區最暢銷的插電式混動車則為三菱歐藍德 PHEV。    汽車諮詢公司 IHS 預計到 2020 年,插混車的全球累計產量將達到 135 萬輛,且在 2020 年至 2025 年間將進一步翻倍至 270 萬輛。而純電動車 2020 年的銷量將在 100 萬輛以下。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

2015台灣國際電動車展 充電樁與電池技術備受矚目

隨著電動車普及,充電設備、車體以及電池等相關領域也成了相關業者爭相投入的目標。今年共有75家展商參與2015年台灣國際電動車展,許多台廠用充電樁與電動車電池等技術做為「電力」展示主軸。

2015年台北國際汽車零配件展&車用電子展於四月8日至11日在台北世貿、南港展覽館同時展出。其中,在世貿展覽的台北國際電動車展有來自台灣、中國大陸、日本、香港、紐西蘭等廠商參加。除了電動車外,其他主要展出內容包括:電池材料、模組與控制系統,馬達與驅控系統、充電樁相關設備與服務、檢測設備。電力是電動車之本,充電樁、電池或自動充電系統等取得電力的管道是本次展覽中十分重要的部分。

台灣的電動車展出

台灣地狹人稠,對電動載具的需求主要是電動機車和小貨卡、高球車、觀光區小車等工具車,且以電動機車最有發展潛力。受限於電池容量以及載重限制,電動機車體積仍較小,但在造型、避震、輪胎、車燈與置物空間等其他部分則已有多樣化發展,整體功能更接近傳統機車。

電動車的功能考量主要有幾個面向:

  • 充電方便性,如充電樁分布、快充功能、電池交換系統
  • 續航力(每次充電至少需可行駛40~50km)
  • 載重力
  • 爬坡力
  • 行駛速度

哈哈世代主要展出的電動車自動回充發電系統為針對電動車之充電需求所研發,小從電動機車,大到電動卡車、輪船或高鐵列車等皆可應用,車輛行駛一小時左右即可充飽電池,最低每公里耗電成本約為新台幣0.2~0.3元。

大同電子在本次展覽中未展出車輛,而是以電動車馬達為主要展示內容。大同所展示的馬達分成感應馬達、磁阻馬達以及內藏式永磁馬達,額定功率與電壓分別從1.8kW到30kW,以及24V到360V,可根據車輛需求的差別選擇不同功率與電壓的馬達。

晶片解決方案提供者Renesas展出了一種專為HEV/EV驅動馬達設計的變頻器套件解決方案,能縮小變頻器尺寸並提升其效率,且可適用各種馬達,也有助提升電動車馬達的效能。

 

電動車電池與充電樁

在本次展覽中,電動車電池的技術仍是最主要的內容。包括電池的蓄電力、充電後的續航力、充放電技術(快充功能)、防爆與安全性之檢測等,都有展示。

長泓能源科技展示氧化鋰鐵動力電池,這種電池的電性穩定、循環壽命長且能量密度高,加上它十分安全、重量又輕,很適合搭配電動車或其他儲設備使用。

充電樁與電池交換站是電動車的電力來源,密集分布的充電樁有助推廣民眾使用電動車。展場中常見的充電設備包括:壁掛式充電站、立柱式充電樁、電池交換器;而非家用充電設備的使用方法分成兩種,一種是經由卡片認證(可設計特殊RFID卡片或與悠遊卡等電子商務整合),另一種則是投幣式。據了解,台灣設置充電樁依縣市政策之別,可獲得約50%的補助;桃園市補助較高,可接近100%。

EValue 展出單槍、雙槍式充電樁,亦有裝設了液晶螢幕的多媒體充電站,可做為廣告看板。Phihong EV Charger 展出多種充電設備,立柱式充電樁的電容有40kW、70kW以及140kW等類型,也有簡易的小型充電站以及電池充電系統。

台灣喜洋洋公司展出的投幣式電動機車充電站可為裝設戶帶來一定的收益,每投幣10元可充100分鐘。目前有大學、社區等裝設與維護合作。

其他相關展示

汽車電控系統也是本次電動車展覽中可見的項目,例如Chroma就展示一體化的智慧電動車方案,可有效掌控電動車電力系統。EV Equipment  則展示更加環保的電動概念車Preeve。

台灣車輛研發聯盟主題館展示多種電動車相關技術,其中汰役電池的應用為未來將大量產生的廢電池找到了第二春。汰役電池的電容、續航力雖低,但可用於供應較低需求電力,或改作UPS系統。目前在金門烈嶼鄉東坑社區已有汰役電池應用測試,搭配太陽能與風能供應30戶住宅用電,也能支援當地的電動車用電。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

推薦一種通過刷leetcode來增強技術功底的方法

背景

如果前人認為這個一種學習提高或者檢驗能力的成功實踐。而自己目前又沒有更好的方法,那就不妨試一試。

而不管作為面試官還是被面試者,編碼題最近越來越流行。而兩種角色都需要思考的問題是希望考察什麼能力,通過什麼題目,需要達到怎樣的程度可以說明面試者具有了這樣的能力。

而要找到上面這些問題的答案,比較好的方式除了看一些理論性文章和接受培訓之外,自己動手刷一刷leetcode切身實踐一下不失為一個不錯的方式。而既然要花精力去做這件事情,那就需要解決一個問題:我從中可以獲得什麼提高。以下是個人的一些經驗和感受。

 

收益

對底層有了更深入的了解和思考

leetcode一些常見題也是平時工作中常用的一些底層數據結構的實現方法。 

先舉個大家使用比較多的算法:LRU(最近最少使用),在Java的實現中實現特別簡單。只是使用了LinkedHashMap這種數據結構。而如果看一些開源包里LRU的實現,發現也是這樣實現的。實際上動手實現一遍,LRU就再也不會忘了。

再舉個數據結構的例子:字典樹又叫前綴樹。它是搜索和推薦的基礎。標準點的定義是:

字典樹又稱單詞查找樹,Tire樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用於統計,排序和保存大量的字符串(但不僅限於字符串),所以經常被搜索引擎系統用於文本詞頻統計。它的優點是:利用字符串的公共前綴來減少查詢時間,最大限度地減少無謂的字符串比較,查詢效率比哈希樹高。

因為之前做過搜索引擎,一直也對這塊很有興趣,所以對它底層知識的補充對個人而言,感覺深度有增加。

 

  

養成評估時空開銷的習慣

我刷leetcode必看官方解答里估算的時間和空間複雜度。這也是作為一個架構師的必備基本能力。

數組、哈希這些因為數據的位置不需要進行查找,只需要算數計算就可以得到,所以它們的時間複雜度是O(1)。

鏈表如果直接在頭部或者尾部插入,因為不需要查找,所以時間複雜度也是O(1),但是定位的話因為涉及查找,按遍歷查找來算是log(n)。所以對於jdk1.7之前,hashmap底層採用的是數組+鏈表的數據結構。所以如果不算哈希衝突和擴容的話,獲取和插入數據的時間複雜度是O(1);如果出現了哈希衝突,則插入因為是頭部插入,時間複雜度還是O(1);獲取時間複雜度因為涉及先查找,所以是O(n),這個n代表衝突的數量。

對於在有序數據中進行查找,因為可採用二分查找等優化,時間複雜度可降到log(n).

對於遞歸調用,如果遞歸方法內進行2次調用。對於層數n來說,時間複雜度是2的n次方。舉個例子就是一個數等於前面兩個數之和。當然,如果是前面3個數之和,不進行優化的情況下時間複雜度就是3的n次方。

對於一個n*m的二維數組等需要進行嵌套循環遍歷的,時間複雜度是O(n*m),有個特殊情況是n*m,這時候時間複雜度是n的平方。

對於全排列的情況,時間複雜度是O(n!)。

 

代碼簡化的方法

 

我習慣的一種學習方法是先做題,有了一定自己的總結和思考之後,再看書學習別人的總結思考方法。對於刷leetcode相關性高,也比較受認可的書是《Cracking the Coding interview(6th)》,中文版翻譯是《程序員面試金典》。這本書對於面試官和面試者來說讀了都會有一定的收穫。

 

我讀了這本書,對我印象最深的是介紹了兩種代碼優化的方法:BUD和BCR。

 

BUD 

BUD是瓶頸、不必要工作、重複工作 三個詞組首字母的縮寫。

 

作者提出拿到一道編程題,可先嘗試用暴力解法將題目寫出來,之後找到解法的性能瓶頸,針對瓶頸進行優化,之後在去掉不必要的工作,最後去掉重複的工作。

這個經典的編程優化方法不只可應用於編程,還可應用於整個程序的優化,也是最常規的優化方法。

 

BCR

BCR是Best Conceivable Runtime的縮寫,意思是想知道自己可以優化到什麼程度,先估算可達到的最優情況。

比如:在一個無序數組中,查找兩個兩個相同的數。直覺來說如果找到這兩個數,最起碼需要將每個數都遍歷一遍,所以可達到的最優情況是O(n),無論怎麼優化,都不可能比這個更好。所以這就是優化的上限。

這本書里還介紹了其他的優化方法如:使用額外數據結構、通過構建測試用例、根據題目的限制和提示來尋找線索,大家看這本書的時候可以了解下。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

【asp.net core 系列】14 .net core 中的IOC

0.前言

通過前面幾篇,我們了解到了如何實現項目的基本架構:數據源、路由設置、加密以及身份驗證。那麼在實現的時候,我們還會遇到這樣的一個問題:當我們業務類和數據源越來越多的時候,我們無法通過普通的構造對象的方法為每個實例進行賦值。同時,傳統意義上的賦值遇到底層切換或者其他修改的時候,就需要修改大量的代碼,對改變不友好。為了改變這種現狀,我們基於面向接口編程,然後使用一些DI功能和IOC框架。

1. IOC和DI

先來給大家解釋幾個概念,IOC全稱Inversion of Control,翻譯過來就是控制反轉,是面向對象編程的一種設計原則,用來降低代碼之間的耦合度。所謂的控制反轉簡單來講就是將類中屬性或者其他參數的初始化交給其他方處理,而不是直接使用構造函數。

public class Demo1
{
}

public class Demo2
{
	public Demo1 demo;
}

對於以上簡單示例代碼中,在Demo2類中持有了一個Demo1的實例。如果按照之前的情況來講,我們會通過以下方法為demo賦值:

// 方法一
public Demo1 demo = new Demo1();
// 方法二
public Demo2()
{
    demo = new Demo1();
}

這時候,如果Demo1變成下面的樣子:

public class Demo1
{
    public Demo1(Demo3 demo3)
    {
        // 隱藏
    }
}
public class Demo3
{
}

那麼,如果Demo2 沒有持有一個Demo3的實例對象,這時候創建Demo1的時候就需要額外構造一個Demo3。如果Demo3需要持有另外一個類的對象,那麼Demo2中就需要多創建一個對象。最後就會發現這樣就陷入了一個構造“地獄”(我發明的詞,指這種為了一個對象卻得構造一大堆其他類型的對象)。

實際上,對於Demo2並不關心Demo1的實例對象是如何獲取的,甚至都不關心它是不是Demo1的子類或者接口實現類。我在示例中使用了類,但這裏可以同步替換成Interface,替換之後,Demo2在調用Demo1的時候,還需要知道Demo1有實現類,以及實現類的信息。

為了解決這個問題,一些高明的程序員們提出了將對象的創建這一過程交給第三方去操作,而不是調用類來創建。於是乎,上述代碼就變成了:

public class Demo2
{
    public Demo1 Demo {get;set;}
    public Demo2(Demo1 demo)
    {
        Demo = demo;
    }
}

似乎並沒有什麼變化?對於Demo2來說,Demo2從此不再負責Demo1的創建,這個步驟交由Demo2的調用方去創建,Demo2從此從負責維護Demo1這個對象的大麻煩中解脫了。

但實際上構造地獄的問題還是沒有解決,只不過是通過IOC的設計將這一步后移了。這時候,那些大神們想了想,不如開發一個框架這些實體對象吧。所以就出現了很多IOC框架:AutoFac、Sping.net、Unity等。

說到IOC就不得不提一下DI(Dependency Injection)依賴注入。所謂的依賴注入就是屬性對應實例通過構造函數或者使用屬性由第三方進行賦值。也就是最後Demo2的示例代碼中的寫法。

早期IOC和DI是指一種技術,後來開始確定這是不同的描述。IOC描述的是一種設計模式,而DI是一種行為。

2. 使用asp.net core的默認IOC

在之前的ASP.NET 框架中,微軟並沒有提供默認的IOC支持。在最新的asp.net core中微軟提供了一套IOC支持,該支持在命名空間:

Microsoft.Extensions.DependencyInjection

里,在代碼中引用即可。

主要通過以下幾組方法實現:

public static IServiceCollection AddScoped<TService>(this IServiceCollection services) where TService : class;
public static IServiceCollection AddSingleton<TService>(this IServiceCollection services) where TService : class;
public static IServiceCollection AddTransient<TService>(this IServiceCollection services) where TService : class;

這裏只列出了這三組方法的一種重載版本。

這三組方法分別代表三種生命周期:

  • AddScored 表示對象的生命周期為整個Request請求
  • AddTransient 表示每次從服務容器進行請求時創建的,適合輕量級、 無狀態的服務
  • AddSingleton 表示該對象在第一次從服務容器請求后獲取,之後就不會再次初始化了

這裏每組方法只介紹了一個版本,但實際上每個方法都有以下幾個版本:

public static IServiceCollection AddXXX<TService>(this IServiceCollection services) where TService : class;
public static IServiceCollection AddXXX(this IServiceCollection services, Type serviceType, Type implementationType);
public static IServiceCollection AddXXX(this IServiceCollection services, Type serviceType, Func<IServiceProvider, object> implementationFactory);
public static IServiceCollection AddXXX<TService, TImplementation>(this IServiceCollection services)
            where TService : class
            where TImplementation : class, TService;
public static IServiceCollection AddXXX(this IServiceCollection services, Type serviceType);
public static IServiceCollection AddXXX<TService>(this IServiceCollection services, Func<IServiceProvider, TService> implementationFactory) where TService : class;
public static IServiceCollection AddXXX<TService, TImplementation>(this IServiceCollection services, Func<IServiceProvider, TImplementation> implementationFactory)
            where TService : class
            where TImplementation : class, TService;

其中:implementationFactory 表示通過一個Provider實現TService/TImplementation 的工廠方法。當方法指定了泛型的時候,會自動依據泛型參數獲取要注入的類型信息,如果沒有使用泛型則必須手動傳入參數類型。

asp.net core如果使用依賴注入的話,需要在Startup方法中設置,具體內容可以參照以下:

public void ConfigureServices(IServiceCollection services)
{
    //省略其他代碼
    services.AddScoped<ISysUserAuthRepository,SysUserAuthRepository>();
}

asp.net core 為DbContext提供了不同的IOC支持,AddDbContext:

public static IServiceCollection AddDbContext<TContext>(
      this IServiceCollection serviceCollection,
      Action<DbContextOptionsBuilder> optionsAction = null,
      ServiceLifetime contextLifetime = ServiceLifetime.Scoped,
      ServiceLifetime optionsLifetime = ServiceLifetime.Scoped)
      where TContext : DbContext;

使用方法如下:

services.AddDbContext<DefaultContext>();

3. AutoFac 使用

理論上,asp.net core的IOC已經足夠好了,但是依舊原諒我的貪婪。如果有二三百個業務類需要我來設置的話,我寧願不使用IOC。因為那配置起來就是一場極其痛苦的過程。不過,可喜可賀的是AutoFac可以讓我免收這部分的困擾。

這裏簡單介紹一下如何使用AutoFac作為IOC管理:

cd Web  # 切換目錄到Web項目
dotnet package add Autofac.Extensions.DependencyInjection # 添加 AutoFac的引用

因為asp.net core 版本3更改了一些邏輯,AutoFac的引用方式發生了改變,現在不介紹之前版本的內容,以3為主。使用AutoFac需要先在 Program類里設置以下代碼:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    		Host.CreateDefaultBuilder(args)
    		.UseServiceProviderFactory(new AutofacServiceProviderFactory()) // 添加這行代碼
    		.ConfigureWebHostDefaults(webBuilder =>
			{
                webBuilder.UseStartup<Startup>();
            });

在Program類里啟用AutoFac的一個Service提供工廠類。然後在Startup類里添加如下方法:

public void ConfigureContainer(ContainerBuilder builder)
{
    builder.RegisterType<DefaultContext>().As<DbContext>()
                .WithParameter("connectStr","Data Source=./demo.db")
                .InstancePerLifetimeScope();
            

    builder.RegisterAssemblyTypes(Assembly.Load("Web"))
        .Where(t => t.BaseType.FullName.Contains("Filter"))
        .AsSelf();

    builder.RegisterAssemblyTypes(Assembly.Load("Domain"),
                    Assembly.Load("Domain.Implements"), Assembly.Load("Service"), Assembly.Load("Service.Implements"))
                .AsSelf()
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope()
                .PropertiesAutowired();
}

修改:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews(options =>
            {
                options.Filters.Add<UnitOfWorkFilterAttribute>();
            }).AddControllersAsServices();// 這行新增
    // 省略其他
}

4. 總結

這一篇簡單介紹了如何在Asp.net Core中啟用IOC支持,並提供了兩種方式,可以說是各有優劣。小夥伴們根據自己需要選擇。後續會為大家詳細深入AutoFac之類IOC框架的核心秘密。

更多內容煩請關注我的博客《高先生小屋》

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準