MES開發(fā)與應用 課件 1.1.13 工業(yè)管理軟件系統(tǒng)技術棧介紹-DotNetCore介紹_第1頁
MES開發(fā)與應用 課件 1.1.13 工業(yè)管理軟件系統(tǒng)技術棧介紹-DotNetCore介紹_第2頁
MES開發(fā)與應用 課件 1.1.13 工業(yè)管理軟件系統(tǒng)技術棧介紹-DotNetCore介紹_第3頁
MES開發(fā)與應用 課件 1.1.13 工業(yè)管理軟件系統(tǒng)技術棧介紹-DotNetCore介紹_第4頁
MES開發(fā)與應用 課件 1.1.13 工業(yè)管理軟件系統(tǒng)技術棧介紹-DotNetCore介紹_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1.1系統(tǒng)技術棧介紹——.NetCore介紹.NetCore歷程.NetCore簡介.NetCore依賴注入.Net

Core中間件學習目標通過本節(jié)學習可以:重點學習.NetCore的依賴注入掌握.NetCore的中間件思想掌握.NetCore的基本概念了解.NetCore的歷程01.NetCore歷程.NetCore背景(1)2010之前的PC時代的時候,互聯(lián)網規(guī)模還不是特別龐大,JAVA和.Net沒什么太大區(qū)別,.net以windows自居。(2)2010年以JAVA為代表的Hadoop大數據興起后,微軟跟進失敗,曾今也實現了一套api,但后來還是放棄維護了。(3)2012年移動互聯(lián)網興起,.net跟進失敗。wp(windowsphone)市場占有率太低,微軟就放棄了。(4)2014-2015微服務時代的來臨,以go為代表的docker技術,python為代表的devops,java的springcloud技術興起,微服務造就了多語言的盛行,微軟還想維護的windows平臺占有率,不想改變。(5)2014年云計算事業(yè)部副總裁薩提亞·納德拉出任微軟CEO,改變微軟企業(yè)文化,開始開源、擁抱linux。(6)2015年微軟對.net平臺進行了重新架構。(7)2016.6.27netcore1.0項目發(fā)布,徹底的改變了windowsonly的場景,擁抱開源。這個版本不穩(wěn)定。之后發(fā)展很快,有.NetCore1.1,.NetCore2.0,.NetCore2.1,.NetCore2.2,.NetCore3.1,NET5,。.NetCore歷程2016-06-27.NetCore2016-11-162017-08-142018-05-302020-01-142019-12-032019-09-232018-12-042020-03-162020-03-242020-11-112021-11-092022-11-08預計2023-11.NetCore

1.0VS2015、C#6.0.NetCore

1.1VS2017、C#7.0.NetCore

2.0VS2017、C#7.1.NetCore

2.1VS2017、C#7.2/7.3.NetCore

3.1.2VS2019(V16.5)、C#8.0.NetCore

3.1.1VS2019(V16.4)、C#8.0.NetCore

3.1VS2019(V16.4)、C#8.0.NetCore

3.0VS2019、C#8.0.NetCore

2.2VS2017、C#7.3.NetCore

3.1.3VS2019(V16.5)、C#8.0.NET5VS2019(V16.8)、C#9.0.NET6VS2022、C#10.0.NET7VS2022、C#11.0.NET8VS2022、C#12.002.NetCore簡介.NETcore簡介運行時.NETCore中包含2種運行時:CoreCLR與NativeRunTime。CoreCLR是一個開源的JIT運行時,它將代碼編譯成中間語言(IL),在終端機器運行時再轉換成機器碼。NativeRuntime將C#、F#或VB代碼直接轉換為原生機器碼直接運行。BCLBCL即BaseClasslibrary基礎類,例如File、System、Console、XML、ADO.NET、日期時間等類庫。AppModel提供上層應用產品開發(fā),Web應用、游戲開發(fā)、桌面程序、物聯(lián)網集成應用等。

.NETCore是基于.NETFramework為基礎,借鑒了其優(yōu)秀的思想與強大的功能,經過重新設計與構建,實現了.NETFramework中的部分功能(不包含WindowsUI部分),比如JIT、垃圾收集器(GC)、CLR、BCL等。.NetCore體系結構詳解.NETcore簡介.NETCore是由許多項目所組成,除了基本的類庫(CoreFX)之外,也包含采用RyuJIT編譯的運行平臺CoreCLR、編譯器平臺.NETCompilerPlatform、采用AOT編譯技術運行最優(yōu)化的包CoreRT(.NETCoreRuntime),以及跨平臺的MSIL編譯器LLILC(LLVM-basedMSILCompiler)等項目。.NetCore核心組成NetCompilerPlatform:RoslynCoreFX.NET

Standard

LibrayCoreCLRCoreRTASP.NETCoreUWP應用層中間層底層.NETcore簡介.NetCore核心組成【應用層】開發(fā)框架開發(fā)框架是開發(fā)基于UI應用的框架集,包括了ASP.NETCore(用于創(chuàng)建WebApp),和UWP(用于創(chuàng)建Windows10App)等?!局虚g層】核心類庫CoreFX(.NETCoreLibraries):CoreFX主要包含數個公共庫,例如System.Collections,System.IO,System.Xml等。CoreFX是.NETStandardLibrary的實現,同樣的.NETFramework4.6.3也是基于.NETStandardLibrary的實現。.NETcore簡介.NetCore核心組成【底層】編譯器

CoreCLR:CoreCLR移植.NETFramework的CLR的功能,包含核心程序庫mscorlib、JIT編譯器、垃圾收集器(GC)以及其他運行MSIL所需要的運行期環(huán)境。核心功能包括:內存管理、程序集加載、安全性、異常、線程管理等。CoreRT:CoreRT是以AOT(Ahead-of-time)編譯方式為主的核心功能,在.NETCore內稱為CoreRT,在UWP則是稱為.NETNative。CoreRT會在建造時期(非運行期)在編譯時將MSIL轉換成平臺本地的機器碼,以獲取較短的引導時間(JIT采用的是運行時期編譯,使得引導時間拉長),以及內存用量減少的優(yōu)點。CoreRT會在不同的平臺使用不同的AOT技術:

·Windows上使用的是.NETNative。

·macOS與Linux上使用的是LLILC(同時支持JIT和AOT)。Roslyn:.NETCompilerPlatform(項目代碼為Roslyn)s是一個開源的跨平臺源代碼編譯器。它是將.NET平臺的編譯架構標準化的平臺,它可提供程序管理工具(如集成開發(fā)環(huán)境)相當多的情報,用以發(fā)展有助于編寫程序與管理程序結構所需要的功能,例如類型信息、語法結構、參考鏈接、語義、編譯器、自動化、錯誤回報等等功能,只要是遵循CLI標準的編程語言,都可以利用.NETCompilerPlatform實現出編譯器,讓程序管理工具能實現如語法提示、語法自動完成、關鍵字高亮等可視化能力。.Netcore簡介跨平臺.NETCore是一個跨平臺的開源框架,它允許開發(fā)人員在不同的操作系統(tǒng)上構建和運行應用程序。以前的.NETFramework主要針對Windows平臺,而.NETCore則支持Windows、macOS和Linux。通過使用.NETCore,開發(fā)人員可以編寫一次代碼,然后在不同的操作系統(tǒng)上運行它,而無需進行大量的修改。這為開發(fā)人員提供了更大的靈活性和可移植性,使他們能夠更輕松地開發(fā)跨平臺的應用程序。跨平臺是.NETCore的一個重要特性,使開發(fā)人員能夠在不同的操作系統(tǒng)上構建和部署應用程序,無論是在開發(fā)桌面應用程序、Web應用程序還是云服務,都能夠獲得更大的靈活性和可擴展性。.Netcore簡介.NetCore優(yōu)勢(1)開源、跨平臺:.NETCore是開放源代碼通用開發(fā)平臺,由Microsoft和.NET社區(qū)在GitHub上共同維護。它跨平臺(支持Windows、macOS和Linux),用于構建web應用、IOT應用和移動后端應用。(2)性能優(yōu)越。據.netcore團隊給出來的性能測試數據來看,Acore(.netcore)相比與原來的Web(.netframework4.6)程序性能提升了2300%。跟python、java等相同環(huán)境比較,性能都要優(yōu)越。(3)內置依賴注入(4)輕量級和模塊化的HTTP請求管道(中間件)(5)能夠在IIS上運行或在自宿主(self-host)的進程中運行03.NetCore依賴注入.NetCore依賴注入為什么要用依賴注入什么是依賴注入,為什么要使用呢?簡單通俗說就是一個類需要另一個類來協(xié)助工作,就產生了依賴,所以需要的依賴項就要【注入】過來一起來協(xié)同完成工作。軟件設計原則中有一個依賴倒置原則(DIP)講的是要依賴于抽象,不要依賴于具體,高層模塊不應該依賴于低層模塊,二者應該依賴于抽象。簡單的說就是為了更好的解耦。而控制反轉(Ioc)就是這樣的一個實現思路,這個思路的其中一種實現方式就是依賴注入(DI)。依賴注入的理解與應用.NetCore依賴注入為什么要用依賴注入依賴注入的理解與應用感覺有點繞,舉個栗子:老李是一個維修工,現在要出任務去維修,得先去申領個扳手。老李:"請給我一把可以擰7mm大小的六角螺絲的扳手.",然后庫管老張就從倉庫里拿了一把這樣的大力牌扳手給老李。.NetCore依賴注入為什么要用依賴注入在這個例子中,維修工老李只要告訴庫管我要一個"可以擰7mm大小的六角螺絲"的扳手即可,他不用關心扳手的品牌和樣式,也不用采購扳手,更不用關心這個扳手是怎么來的。而對于庫管,他只需提供滿足這樣規(guī)則的一個扳手即可,不用去關心老李拿著這個扳手之后去干什么。所以老李和老張都只是關心"可以擰7mm大小的六角螺絲的"這個規(guī)則即可,也就是說,如果后期倉庫里不再提供大力牌扳手,而是提供了這樣的大牛牌扳手,無論換了什么牌子和樣式,只要仍滿足這個規(guī)則,老李仍然可以正常工作。它們定義了一個規(guī)則(比如接口IWrench7mm),二者都依賴于這個規(guī)則,然后倉庫無論提供大力牌(WrenchDaLi:IWrench7mm)還是大牛牌(WrenchDaNiu:IWrench7mm),都不影響正常工作.依賴注入的理解與應用.NetCore依賴注入為什么要用依賴注入這就是依賴倒置原則(DIP),不依賴于具體(牌子),高層模塊(老李)不應該依賴于低層模塊(大力牌扳手),二者應該依賴于抽象(IWrench7mm:可以擰7mm大小的六角螺絲)。如果直接由老李去獲取(new)大力牌扳手,那么當業(yè)務改變要求采用大牛牌的時候,我們就要去修改老李的代碼。為了解耦,在本例中我們只要在配置中讓倉庫由原來的提供大力牌改為提供大牛牌即可。老李要使用的時候,可以通過注入(構造器、屬性、方法)的方式,將倉庫提供的扳手實例提供給老李使用。依賴注入的理解與應用.NetCore依賴注入依賴注入理解引入依賴注入的目的是為了解耦。說白了就是面向接口編程,通過調用接口的方法,而不直接實例化對象去調用。這樣做的好處就是如果添加了另一個種實現類,不需要修改之前代碼,只需要修改注入的地方將實現類替換。上面說的通過接口調用方法,實際上還是需要去實例化接口的實現類,只不過不需要我們手動new構造實現類,而是交給如微軟的DI、Autofac這些工具去構建實現類。我們只需要告訴它們,某個類是某個接口的實現類,當用到的時候,工具(比如,微軟的DI)會自動通過構造函數實例化類。依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入打開Startup這個文件,看一下里面的ConfigureServices方法。顧名思義,這個方法是用來配置服務,系統(tǒng)默認已經添加了一些服務,剩下的就是我們把自己需要的用的添加進去。參數為服務集合IServiceCollection對象,這種對象提供了AddSingleton、AddScoped和AddTransient三種方法來添加服務,三種方法添加的服務的生命周期不一樣。依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入添加一個名為DIDemo的.NETCOREMVC項目,在該項目下創(chuàng)建一個服務文件夾(Servers)(1)定義接口Icount(2)實現接口類Count至此,服務(類)有了,那么如何能讓這個服務為我們所用呢?或者說為我們服務呢?依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入(3)把類(服務)在Startup文件中通過ConfigureServices方法注入服務。使用容器的好處,由容器來統(tǒng)一管理實例的創(chuàng)建和銷毀,你只需要關心怎么用就行了,不需要關系怎么創(chuàng)建跟銷毀。當然容器創(chuàng)建的實例都是有生命周期的。三種創(chuàng)建方法創(chuàng)建的實例生命周期不一樣。? Transient:瞬態(tài)模式,每一次訪問都會創(chuàng)建一個新的實例? Scoped:域模式,在同一個Scope內只初始化一個實例,可以理解為(每一個request級別只創(chuàng)建一個實例,同一個httprequest會在一個scope內)。對象在一次請求中是相同的,但在不同請求中是不同的。? Singleton:單例模式,整個應用程序生命周期以內只創(chuàng)建一個實例依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入常用注入方式有三種如下:publicvoidConfigureServices(IServiceCollectionservices){ …… //下面先以AddScopend方法闡述下常用的三種注入方式

//1.最常用的注入方式,以接口形式暴露服務。下面2中方式意思一樣

//1.1AddScopend后面是(),里面的接口和實現類必須套一層typeof services.AddScoped(typeof(ICount),typeof(Count)); //1.2AddScopend后面是<>,里面就直接寫接口和實現類,當然最后有一個() services.AddScoped<ICount,Count>(); //2.自己注入自己,以實現形式暴露服務

services.AddScoped(typeof(Count)); services.AddScoped<Count>(); //3.需要傳參的構造函數的類的注入(后面實例有應用講解)

//services.AddScoped(typeof(ICount),sp=>{returnnewCount(參數);}); //services.AddScoped<ICount>(sp=>{returnnewCount(參數);}); ……}依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入(4)接下來分析演示三種注入方法的區(qū)別:上面ConfigureServices方法中保留下面的瞬態(tài)模式//第1種:瞬態(tài)模式,每一次訪問都會創(chuàng)建一個新的實例services.AddTransient<ICount,Count>();服務注入之后,我們就要用它。切換到控制器。那么能把服務實例注入到控制器中來呢?有屬性注入、構造方法注入、方法注入。這里一般會用構造方法注入。依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入publicclassHomeController:Controller{privateICount_count;//方便本類其他方法的調用,所以定義一個私有字段來接收

publicHomeController(ICountcount)//通過構造方法注入實例,ASP.NETCORE內置了依賴注入容器

{_count=count;}//說明:請求到home控制器,自然調用home控制器的構造方法,構造方法中需要一個ICount類型的對象,它怎么來的呢?這就是因為.NETCore內置了依賴注入容器,這個時候就會到StartUp.cs文件中的ConfigureServices方法中去找相應的依賴,而在那里告訴了ICount由Count來實現(services.AddTransient<ICount,Count>();),所以這時會去調用Count的構造方法實例化Count對象。

//接下來就可以在控制器中使用_countpublicIActionResultIndex(){intc=_count.MyCount();ViewBag.count=c;returnView();} ……}依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入前端展示:運行效果,不斷刷新頁面也總是0,因為瞬態(tài)模式注入的服務,每一次訪問都會創(chuàng)建一個新的實例。依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入上面ConfigureServices方法中改為下面的單例模式//第2種:單例模式,整個應用程序生命周期以內只創(chuàng)建一個實例services.AddSingleton<ICount,Count>();運行效果,不斷刷新頁面不斷增加1.依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入繼續(xù)把上面ConfigureServices方法中改為下面的域模式//第3種:域模式,在同一個Scope內只初始化一個實例,可以理解為(每一個request級別只創(chuàng)建一個實例,同一個httprequest會在一個scope內)services.AddScoped<ICount,Count>();運行效果,不斷刷新頁面一直保持為0,因為每次刷新頁面都是一個新的請求,所以總是0,在一個請求內產生的實例對象才是唯一。依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入改進下測試代碼publicclassHomeController:Controller{privateIServiceProvider_provider;privateICount_count;//方便本類其他方法的調用,所以定義一個私有字段來接收

publicHomeController(ICountcount,IServiceProviderprovider)//通過構造方法注入實例,ASP.NETCORE內置了依賴注入容器

{_count=count;_provider=provider;}publicIActionResultIndex()//接下來就可以在控制器中使用_count{//intc=_count.MyCount();//ViewBag.count=c; //注意導入usingMicrosoft.Extensions.DependencyInjection;ICountcount1=_provider.GetService<ICount>();ICountcount2=_provider.GetService<ICount>();intc1=count1.MyCount();intc2=count2.MyCount();ViewBag.count1=c1;ViewBag.count2=c2; returnView();}}依賴注入的理解與應用.NetCore依賴注入依賴的服務如何注入前端調整,如右圖:測試發(fā)現c1、c2分別為0,1但是每次刷新又重新為0,1因為每次刷新頁面都是一個新的請求,所以總是0,在一個請求內產生的實例對象才是唯一依賴注入的理解與應用.NetCore依賴注入如何在視圖中直接使用依賴注入如下圖修改視圖,主要是通過@inject去注入實例對象:@{ViewData["Title"]="HomePage";}@ViewBag.count1@ViewBag.count2@injectDIDemo.Servies.ICountcount@{intc=count.MyCount();}@c<divclass="text-center"><h1class="display-4">Welcome</h1><p>Learnabout<ahref="/aspnet/core">buildingWebappswithASP.NETCore</a>.</p></div>依賴注入的理解與應用新增@inject注入的寫法驗證.NetCore依賴注入如何在視圖中直接使用依賴注入運行結果為2,原因是因為在控制器中生成的實例中已經得到0、1,而視圖中的實例還是通過控制器注入時生成的那個實例,所以這個時候為2如果在st

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論