2009-05-25 32 views
3

我们有一个接口,它将通过类 来实现,例如,它负责通过网络或com端口进行数据传输。使用MEF的部分特定设置

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

ComPortDataTransporter和TcpDataTransporter。

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

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

有没有处理这个问题的最佳实践?最终我们希望用户能够加载一个“零件”,并且 配置一次。

Thnx。

回答

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属性中读取以确定其地址/端口/无论如何。

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

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

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

+0

听起来像一个好主意,不会将它标记为答案,但我可以。我现在拥有的是Dictionary 作为IDataTransporter接口的一部分。我也会研究这个解决方案。 我想知道如果程序集可以有自己的.xml配置文件.... – TimothyP 2009-05-25 03:27:46