這篇文章主要講解了“.NET怎么實(shí)現(xiàn)熱插拔功能”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“.NET怎么實(shí)現(xiàn)熱插拔功能”吧!

幾種方案
1 腳本化:采用 Iron 或 集成其它腳本引擎。
2 AppDomain:微軟的 Add In 框架就是為這個(gè)目的設(shè)計(jì)的。
3 分布式 + 負(fù)載平衡 :輪流更新集群中的服務(wù)器。
4 Assembly.LoadFrom + 強(qiáng)簽名程序集:因?yàn)橄嗤瑯?biāo)識(shí)的程序集在內(nèi)存中只會(huì)加載一次,所以每次功能發(fā)生變化,都要增加程序集的版本號(hào)。
5 Assembly.Load + + 強(qiáng)簽名程序集 + GAC:因?yàn)橄嗤瑯?biāo)識(shí)的程序集在內(nèi)存中只會(huì)加載一次,所以每次功能發(fā)生變化,都要增加程序集的版本號(hào)。
6 Assembly.LoadFile:Assembly.LoadFile 可以多次加載相同標(biāo)識(shí)的程序集,只要程序集所在的目錄位置不同。
重點(diǎn)說(shuō)一下 Assembly.LoadFile
測(cè)試代碼
復(fù)制代碼 代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.IO;
using Contracts;
namespace Test
{
class Program
{
static void Main(string[] args)
{
SetupPlugEnvironment();
ExecuteOperator("1.0.0.0");
ExecuteOperator("2.0.0.0");
}
private static void ExecuteOperator(string version)
{
var operatorType = Type.GetType("Implements.Operator, Implements, version = " + version + "");
var operatorInstance = Activator.CreateInstance(operatorType) as IOperator;
operatorInstance.Operate();
}
private static void SetupPlugEnvironment()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
AssemblyName name = new AssemblyName(args.Name);
var file = Path.Combine(
@"E:\Coding\HappyStudy\LoadContextStudy\Test\bin\Debug\Plugs",
name.Name,
name.Version.ToString(),
name.Name + ".dll");
Console.WriteLine("加載插件:" + name.Version);
return Assembly.LoadFile(file);
}
}
}
說(shuō)明
調(diào)用 Type.GetType 會(huì)導(dǎo)致 CLR 執(zhí)行程序集探測(cè)過(guò)程,在正常的探測(cè)路徑下沒(méi)有找到程序集就會(huì)觸發(fā) AssemblyResolve 事件,為啥會(huì)觸發(fā)兩次呢?我還不知道。
微軟不推薦使用 LoadFile(會(huì)加載相同標(biāo)識(shí)的程序集多次),Add In 采用的是 AppDomain,MEF 采用的是 LoadFrom。
感謝各位的閱讀,以上就是“.NET怎么實(shí)現(xiàn)熱插拔功能”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì).NET怎么實(shí)現(xiàn)熱插拔功能這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)站名稱:.NET怎么實(shí)現(xiàn)熱插拔功能-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.chinadenli.net/article18/djdcdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、品牌網(wǎng)站制作、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、全網(wǎng)營(yíng)銷推廣、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容