c# - MEF 的零件特定设置

标签 c# configuration mef

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

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

ComPortDataTransporter 和 TcpDataTransporter。

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

第一个有诸如波特率、开始/停止位等设置…… 第二个具有 IP 地址和端口等设置。

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

感谢。

最佳答案

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

假设您的主机应用程序定义了一个接口(interface):

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

...并假定任何 IDataTrasporter 都具有该类型的公共(public)属性:

public interface IDataTransporter
{
    IDataTransporterSettings Settings { get; }
}

...那么您的“设置”可能是一个具有匹配每个设置的一堆公共(public)属性的类:

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

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

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

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

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

关于c# - MEF 的零件特定设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/905096/

相关文章:

configuration - 我可以强制我的 reducer (复制阶段)仅在所有映射器完成时启动吗

c# - CS3016 - 在使用 Prism + MEF ExportModule 时我们如何解决这个问题?

c# - 为什么我无法调试动态加载的程序集?

c# - 获取 Excel 工作表名称到 C#

c# - Blazor 与 MatBlazor 在 AuthorizeView 中使用 MatTableRow 导致相同参数名称错误

c# - 什么是更好的做法 : duplicate code or use goto statement?

configuration - 带有 PHP_OS 常量的系统名称是什么

c# - 使用 HtmlAgilityPack 确定字符串是否仅包含允许标签列表中的标签

javascript - 如何使 $routeProvider 在 angularjs 中正常工作

c# - MEF 组合问题,多线程