【问题标题】:Part specific settings with MEF使用 MEF 进行部件特定设置
【发布时间】:2010-10-28 15:39:57
【问题描述】:

我们有一个由类实现的接口 例如,负责跨网络或 COM 端口的数据传输。

我们暂时称它为 IDataTransporter,我们有 2 个实现:

ComPortDataTransporter 和 TcpDataTransporter。

显然这两个需要非常不同的配置。

第一个具有诸如 buadrate、开始/停止位等设置... 第二个有ip地址和端口等设置。

是否有任何最佳实践来处理这个问题? 最后,我们希望用户能够加载“零件”并且 配置一次。

谢谢。

【问题讨论】:

    标签: c# configuration mef


    【解决方案1】:

    也许您可以将某种配置部分与传输器部分一起导出。

    假设您的宿主应用程序定义了一个接口:

    public interface IDataTransporterSettings 
    {
        // any common settings are defined here
    }
    

    ...并假设任何 IDataTrasporter 都具有该类型的公共属性:

    public interface IDataTransporter
    {
        IDataTransporterSettings Settings { get; }
    }
    

    ...那么您的“设置”可能是一个类,其中包含一组与每个设置匹配的公共属性:

    public class TcpDataTransporterSettings : IDataTransporterSettings
    {
        public string Address { get; set; }
        public int Port { get; set; }
    }
    

    然后,您的 TcpDataTransporter 类将始终从其 Settings 属性中读取以确定其地址/端口/任何内容。

    现在,您的宿主应用程序可以使用反射检查其每个导入的传输器部件的设置,并为每个公共可设置属性(字符串的 TextBox、整数的 NumericUpDown 等)显示适当的控件。

    我想通过一些工作,您可以通过 Attributes 为每个属性添加人类可读的描述,这样您就可以在 UI 中为每个控件定义标签。

    我还没有完全考虑到这一点,当然我也没有在任何地方实现它,但听起来它可以为每个导入的部分提供灵活的设置。

    【讨论】:

    • 听起来是个好主意,暂时不会将其标记为答案,但我可能会。我现在拥有的是 Dictionary 作为 IDataTransporter 接口的一部分。我也会研究这个解决方案。我想知道程序集是否可以有自己的 .xml 配置文件....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2019-02-12
    相关资源
    最近更新 更多