国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - .NET實(shí)現(xiàn)熱插拔功能(動態(tài)替換功用)方案實(shí)例

.NET實(shí)現(xiàn)熱插拔功能(動態(tài)替換功用)方案實(shí)例

2019-11-22 11:53ASP.NET教程網(wǎng) ASP.NET教程

如果某個"功能"需要動態(tài)更新?這種動態(tài)更新,可能是需求驅(qū)動的,也可能是為了修改 BUG,面對這種場景,如何實(shí)現(xiàn)“熱插拔”呢?先解釋一下“熱插拔”:在系統(tǒng)運(yùn)行過程動態(tài)替換某些功能,不用重啟系統(tǒng)進(jìn)程。下面看例子

幾種方案

1 腳本化:采用 Iron 或 集成其它腳本引擎。
2 AppDomain:微軟的 Add In 框架就是為這個目的設(shè)計的。
3 分布式 + 負(fù)載平衡 :輪流更新集群中的服務(wù)器。
4 Assembly.LoadFrom + 強(qiáng)簽名程序集:因?yàn)橄嗤瑯?biāo)識的程序集在內(nèi)存中只會加載一次,所以每次功能發(fā)生變化,都要增加程序集的版本號。
5 Assembly.Load +  + 強(qiáng)簽名程序集 + GAC:因?yàn)橄嗤瑯?biāo)識的程序集在內(nèi)存中只會加載一次,所以每次功能發(fā)生變化,都要增加程序集的版本號。
6 Assembly.LoadFile:Assembly.LoadFile 可以多次加載相同標(biāo)識的程序集,只要程序集所在的目錄位置不同。

重點(diǎn)說一下 Assembly.LoadFile

.NET實(shí)現(xiàn)熱插拔功能(動態(tài)替換功用)方案實(shí)例

測試代碼

 

復(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);
        }
    }
}



.NET實(shí)現(xiàn)熱插拔功能(動態(tài)替換功用)方案實(shí)例

 

說明
調(diào)用 Type.GetType 會導(dǎo)致 CLR 執(zhí)行程序集探測過程,在正常的探測路徑下沒有找到程序集就會觸發(fā) AssemblyResolve 事件,為啥會觸發(fā)兩次呢?我還不知道。

微軟不推薦使用 LoadFile(會加載相同標(biāo)識的程序集多次),Add In 采用的是 AppDomain,MEF 采用的是 LoadFrom。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品3区 | 精品一二三四区 | 日韩一区二区三区在线观看 | 免费在线观看黄色 | 国内精品视频 | 亚洲一区二区免费视频 | 日韩在线播放一区二区三区 | 日本亚洲欧美 | 亚洲国产精品自拍视频 | 亚洲视频免费观看 | 日韩欧美一区二区中文字幕 | 三级在线观看网站 | 日韩在线看片 | 91久久在线观看 | 午夜精品久久久久久久久 | 色久综合 | 国产一区免费 | 午夜av网站 | 高清hd写真福利在线播放 | 在线观看91免费视频 | 国产9色在线 | 日韩 | 高清在线一区二区 | 日本激情综合网 | 久久久久久久久久久网站 | 午夜视频在线免费观看 | 国产精品美女久久久久aⅴ国产馆 | 亚洲高清在线视频 | 中文字幕精品一区二区三区精品 | 午夜免费视频福利 | 亚洲性网| 国产成人精品一区二区三区四区 | 亚洲一区二区三区四区的 | 婷婷色国产偷v国产偷v小说 | 久久国产欧美日韩精品 | 久久久精品网 | 国产目拍亚洲精品99久久精品 | 久久久婷 | 亚洲视频免费 | 91在线你懂的 | 亚洲激情视频 | 欧美日韩精品网站 |