MEF的部件特定设置

时间:2009-05-25 02:06:37

标签: c# configuration mef

我们有一个将由类实现的接口 例如,它负责通过网络或COM端口进行数据传输。

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

ComPortDataTransporter和TcpDataTransporter。

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

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

有没有最好的做法来解决这个问题? 最后,我们希望用户能够加载“部分”和 配置一次。

日Thnx。

1 个答案:

答案 0 :(得分:4)

也许您可以将某种配置部件与运输部件一起导出。

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

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,int为NumericUpDown等)。

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

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