【问题标题】:What is the correct way to use app.config for my plugin when using MEF?使用 MEF 时,为我的插件使用 app.config 的正确方法是什么?
【发布时间】:2015-06-05 16:45:13
【问题描述】:

所以我的主机程序将使用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 配置,因此更改它没有任何效果,因此在这种情况下,它实际上是硬编码和冗余的。

在互联网上阅读我发现:

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

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

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

【问题讨论】:

    标签: c# configuration app-config mef


    【解决方案1】:

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

    为简单起见,您可以将配置视为最终用户的只读数据。用户不得(而且通常不能)更改配置,除非它具有管理权限。例如,需要配置运行时版本、程序集加载的探测路径等。通常,这里用户无需更改任何内容。

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

    当然,有时很难在这些概念之间定义清晰的界限。尽管如此,内置的配置/设置机制假设您每个可执行文件都有一个 config-文件,但您可以为每个插件定义自定义 settings

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

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

    注意,设置文件和配置文件是不同的文件;设置文件位于用户可以更改的位置(%UserProfile%\AppData*)。

    【讨论】:

    • 嗨丹尼斯。你有这个问题的答案吗:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 2021-11-24
    • 2021-09-23
    • 2017-04-07
    • 2013-01-09
    相关资源
    最近更新 更多