【问题标题】:Methods for categorizing 'plugin' DLLs对“插件”DLL 进行分类的方法
【发布时间】:2011-09-26 14:17:16
【问题描述】:

在我的团队中,我们正在创建一个 .NET (WinForms) 应用程序,它将附加程序集 (DLL) 作为可插入组件加载。

这些操作需要分类为产品类别,以便在 GUI 中以有组织的方式呈现。

我们刚刚开始实现此功能,因此对于初学者,我们保留一个主 .xml 文件,用于将不同的程序集映射到类别。

这个过程很脆弱,容易出错,这个功能的最终版本应该会自动创建这个映射(不知何故)。

我们正在寻找一种方法来映射现在(以及将来)的不同 DLL 并保持所有这些同步。

我们的一些建议是:

  1. 属性 - 用一些属性标记每个程序集,并运行一些 在构建期间生成某种映射文件的自定义工具, 根据这些属性。

    这个过程会起作用,但这意味着静态编译 类别名称进入程序集本身,使其无法 安装后在客户端机器上动态更新。

  2. 配置文件 - 为程序集添加配置文件(a 练习这我相信很少使用)并包含所需的 以某种形式存在的信息。

这主要是我考虑的两个选项,一个是静态的,另一个是动态的(在应用部署后可更新)。

虽然我们没有预见到任何变化,要求此映射是动态的,但我不知何故觉得将其静态编译为属性是错误的。

还有其他好的选择可以满足这样的要求吗? 此外,我还没有考虑到所提出的解决方案还有其他优点/缺点吗?

【问题讨论】:

    标签: c# configuration configuration-files


    【解决方案1】:

    你应该在这里问的第一个问题是:

    • 谁必须能够更改程序集类别映射?
    • 是否可以将您的每个插件程序集关联到任意类别,或者这没有任何意义/可能导致错误?
    • 在安装更新期间发生类别更改是否足够?

    要构建到程序集中的元数据是正确的,如果每个程序集在某个时间点只能属于定义的类别(或定义的类别列表),如果有人可能会导致运行时错误以错误的方式更改类别。稍后更新类别映射并非不可能,只要您安装了新版本的组件,就有可能。

    如果其他人应该能够更改实际映射,而无需安装新版本的软件,则将映射放入单独的配置文件或 XML 文件是正确的选择。这可能导致需要一个用户友好的对话框来以不太容易出错的方式更改映射。

    【讨论】:

    • 再次考虑这个问题,根据您的问题,我认为只能定期更新(软件更新)而不是最终用户更新是可以的。考虑到这一点,我相信程序集中的元数据是一个不错的选择。使用这种方法有什么陷阱吗?
    • @liortal:我确实想到了一个陷阱:这里有相同的信息冗余可用。如果您的程序集类别映射存储在程序集的元数据中,为什么需要额外的映射文件(存在数据不一致的风险)?在我看来,这就像一个(过早的,不必要的?)性能优化。如果您确实需要该映射文件,请确保您的构建过程是万无一失的,以便映射文件始终与程序集中存储的信息匹配。
    • 如果我们确实将信息嵌入到程序集中,则该映射文件是多余的,尽管它可能作为某种“缓存”派上用场(因为通过数百个 DLL 来寻找它们的元数据是一个缓慢的过程,会使应用程序的启动非常缓慢)。这是一个不同的问题,与程序集的分类无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多