2009-05-25 30 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