MEF适用于大量的插件

时间:2019-10-14 17:31:39

标签: c# mono add-in mef

我目前正在开发一个基于C#的应用程序,该应用程序加载了许多不同的模块(用于硬件组件的.net驱动程序等)。该应用程序应提供某种插件/加载项管理器以选择专用模块(仅专用的一组设备,过滤器,组件)。基于一个事实,即MS提供了一个完善的框架MEF,我认为尝试一下是个好主意。

我当前面临的主要问题是,在通过 onSelectFile(event) { let element: HTMLElement = document.querySelector('input[type="file"]') as HTMLElement; element.click(); if (event.target.files && event.target.files[0]) { const file = event.target.files[0]; const reader = new FileReader(); reader.readAsDataURL(file); // read file as data url reader.onload = (event) => { // called once readAsDataURL is completed this.addPicture(reader.result, file); this.changeDetectorRef.detectChanges(); }; } } 扫描文件夹中的加载项之后,所有程序集都已加载到进程中(当前未实例化任何内容,因为我使用了“惰性”机制)。

尽管如此,当用户稍后决定只选择其中一些组件时,我还是希望避免在过程中加载所有组件。

因此,我尝试找到一种方法来获取加载项元数据,而又不将程序集加载到流程中。我已经看到DirectoryCatalog框架似乎支持基于XML的清单的这种情况-但我不确定用MEF是否可以完成类似的工作?

1 个答案:

答案 0 :(得分:0)

我正是出于这个目的写了LazyAssemblyCatalog。 它允许您懒惰地加载插件程序集,同时仍然可以访问它们的元数据。