亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2013年11月25日 09:51:10   作者:  
如果某個(gè)"功能"需要動態(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 框架就是為這個(gè)目的設(shè)計(jì)的。
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

測試代碼

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



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

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

相關(guān)文章

  • asp net core 2.1中如何使用jwt(從原理到精通)

    asp net core 2.1中如何使用jwt(從原理到精通)

    這篇文章主要給大家介紹了關(guān)于asp net core 2.1中如何使用jwt(從原理到精通)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-11-11
  • ExceptionLess的安裝、配置、使用教程

    ExceptionLess的安裝、配置、使用教程

    Exceptionless?是一個(gè)開源的實(shí)時(shí)的日志收集框架,它可以應(yīng)用在基于?ASP.NET,ASP.NET?Core,Web?API,Web?Forms,WPF,Console,ASP.NET?MVC?等技術(shù)開發(fā)的應(yīng)用程序中,這篇文章給大家介紹ExceptionLess安裝使用,感興趣的朋友一起看看吧
    2022-07-07
  • 在ASP.NET Core5.0中訪問HttpContext的方法步驟

    在ASP.NET Core5.0中訪問HttpContext的方法步驟

    這篇文章主要介紹了在ASP.NET Core5.0中訪問HttpContext的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Global.asax的Application_Error實(shí)現(xiàn)錯誤記錄/錯誤日志的代碼

    Global.asax的Application_Error實(shí)現(xiàn)錯誤記錄/錯誤日志的代碼

    本文為大家介紹下利用Global.asax的Application_Error實(shí)現(xiàn)錯誤記錄,具體如下,有此需求的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • Asp.net中把Excel數(shù)據(jù)存儲至SQL Server中的具體實(shí)現(xiàn)方法

    Asp.net中把Excel數(shù)據(jù)存儲至SQL Server中的具體實(shí)現(xiàn)方法

    Asp.net中把Excel數(shù)據(jù)存儲至SQL Server中的具體實(shí)現(xiàn)方法,需要的朋友可以參考一下
    2013-06-06
  • linq中的串聯(lián)操作符

    linq中的串聯(lián)操作符

    這篇文章介紹了linq中的串聯(lián)操作符,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 詳解ASP.NET Core 在 JSON 文件中配置依賴注入

    詳解ASP.NET Core 在 JSON 文件中配置依賴注入

    本篇文章主要介紹了詳解ASP.NET Core 在 JSON 文件中配置依賴注入 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • ASP.NET在上傳文件時(shí)對文件類型的高級判斷的代碼

    ASP.NET在上傳文件時(shí)對文件類型的高級判斷的代碼

    在上傳文件過程中,可以通過修改擴(kuò)展名來逃過文件類型的判斷并實(shí)現(xiàn)上傳,就需要可以驗(yàn)證究竟是什么文件。下面的代碼大家可以測試下。
    2009-12-12
  • ASP.NET MVC 3仿Server.Transfer效果的實(shí)現(xiàn)方法

    ASP.NET MVC 3仿Server.Transfer效果的實(shí)現(xiàn)方法

    這篇文章主要介紹了ASP.NET MVC 3仿Server.Transfer效果的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-10-10
  • .NET中字符串比較的最佳用法

    .NET中字符串比較的最佳用法

    本文詳細(xì)講解了.NET中字符串比較的最佳用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02

最新評論