使用MEF时,使用app.config插件的正确方法是什么?

本文关键字:使用 方法 是什么 插件 MEF app config | 更新日期: 2023-09-27 17:53:26

那么我的主机程序将使用MEF DirectoryCatalogue加载插件

现在我有:

Host.exePlugin1.dll

Plugin1.dll在它自己的配置(Plugin1.dll.Config)中有一个配置设置:

<applicationSettings>
        <Plugin1.Settings>
            <setting name="MyString" serializeAs="String">
                <value>Hello</value>
            </setting>
        </Plugin1.Settings>
</applicationSettings>

在Plugin1中使用:

var myString = Settings.Default.MyString;

现在的问题是,这是一个。dll配置,所以改变它没有效果,因此在这种情况下,它实际上是硬编码和冗余的。

在网上四处阅读我发现:

你得到一个app.config文件每个可执行文件(EXE,而不是DLL)。启动可执行文件,创建AppDomain,然后加载MyApp.exe.config。

但是通过添加配置到我的Host.exe,这意味着当我添加一个新的插件时,我将不得不用新的配置重新分发我的Host.exe给我的客户端,而不是Host.exe只是动态加载它找到的任何插件。

处理这种情况的正确方法是什么?

使用MEF时,使用app.config插件的正确方法是什么?

首先,让我们区分设置配置。乍一看,设置和配置非常相似,但它们是不同的概念,具有不同的目的。

为简单起见,您可以将配置视为最终用户的只读数据。用户不能(通常不能)更改配置,除非具有管理权限。例如,配置需要运行时版本,程序集加载的探测路径等。一般来说,用户在这里不需要改变什么。

另一方面,设置是用户可以更改的数据,以便更方便地使用应用程序。用户界面语言,在启动时打开或不打开某些窗口,连接字符串(如果应用程序可以从不同的数据源检索数据)-所有这些都是用户设置。

当然,有时很难在这些概念之间定义明确的界限。然而,内置的配置/设置机制假设,每个可执行文件都有一个配置文件,但是您可以为每个插件定义自定义设置

所以,如果插件需要一些配置,那么是的,你必须将这些配置添加到config-file中(例如,通过创建新的配置部分),并重新分发更改的配置文件(在这种情况下你不需要重新分发可执行文件)。

但是,如果插件需要一些设置 (applicationSettings建议,这是你的情况),那么定义自定义设置类型就足够了(例如,在插件的项目中添加设置)。然后,在运行时,您只需要保存更改的设置-框架将完成其余的工作:它将找到设置文件,并更新它。在这种情况下,你不需要更新和重新分发配置文件。

注意,设置文件和配置文件是不同的文件;

设置文件位于用户可以更改它的地方(%UserProfile%'AppData*)。