首页 > 其他 > 详细

MEF在运行时替换插件

时间:2018-05-15 23:20:03      阅读:179      评论:0      收藏: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,然后重新加载。

MEF在运行时替换插件

原文:https://www.cnblogs.com/zeroone/p/9043500.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!