美文网首页
{C#} MEF如何在运行时替换插件

{C#} MEF如何在运行时替换插件

作者: windflow | 来源:发表于2016-10-27 16:28 被阅读0次

主要是利用AppDomain的ShadowCopy特性。

        var setup = new AppDomainSetup
        {
            CachePath = cachePath,
            ShadowCopyFiles = "true",
            ShadowCopyDirectories = pluginPath
        };

之后创建程序集

        domain = AppDomain.CreateDomain("Host_AppDomain", AppDomain.CurrentDomain.Evidence, setup);
        var asmfullname = typeof(UseConfig).Assembly.FullName;
        var typefullname = typeof(UseConfig).FullName;
        useConfig = (UseConfig)domain.CreateInstanceAndUnwrap(asmfullname, typefullname);
        useConfig.Build();

在创建好的程序集里通过MEF加载插件

    useConfig.cs:
    public void Build()
    {
        var regBuilder = new RegistrationBuilder();
        regBuilder.ForTypesDerivedFrom<IConfig>().Export<IConfig>();

        var catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(typeof(UseConfig).Assembly, regBuilder));
        directoryCatalog = new DirectoryCatalog(pluginPath, regBuilder);
        catalog.Catalogs.Add(directoryCatalog);

        container = new CompositionContainer(catalog);
        container.ComposeExportedValue(container);

        configs = container.GetExportedValues<IConfig>();
    }

替换插件有两种情况

  1. 先删除后添加
    刷新一下,重新输出。
    public void Recompose()
    {
    directoryCatalog.Refresh();
    container.ComposeParts(directoryCatalog.Parts);
    configs = container.GetExportedValues<IConfig>();
    }

  2. 直接替换
    通过FileWatch监视,一旦有文件变化Unload AppDomain,然后重新加载。

相关文章

  • {C#} MEF如何在运行时替换插件

    主要是利用AppDomain的ShadowCopy特性。 之后创建程序集 在创建好的程序集里通过MEF加载插件 替...

  • 神奇的runtime

    (1)在运行时对函数进行动态替换 : class_replaceMethod 使用该函数可以在运行时动态替换某个类...

  • Python猴子补丁

    属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。 为什么叫猴子补丁 属性的运行时替换和猴子也没什...

  • runtime

    Objective-C可以在运行时修改对象(例如替换class)和类(例如增加、删除和替换ivar和方法),因此符...

  • SystemUI plugin 开发

    SystemUI Plugins SystemUI插件提供了一种快速替换SystemUI原有组件的方法,可以在运行...

  • 猴子补丁

    属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。猴子补丁的叫法有些莫名其妙,只要和“模块运行时替...

  • vue动态换肤(elementui+webpack-theme-

    利用webpack-theme-color-replacer插件,为elementui实现了在运行时动态切换主题色...

  • c#特性

    c#特性: 特性(Attribute)是用于在运行时传递程序中的各种元素(比如类,方法,结构,枚举,组件等)的行为...

  • 高德地图插件化各种问题

    1、appkey老是不正确作为插件运行时,在AndroidManifest里设置会无效,需要在运行时设置。而高德有...

  • 深入理解Android插件化技术原理

    前言: 插件化技术最初源于免安装运行apk的想法,这个免安装的apk可以理解为插件。支持插件化的app可以在运行时...

网友评论

      本文标题:{C#} MEF如何在运行时替换插件

      本文链接:https://www.haomeiwen.com/subject/srhsuttx.html