2014-12-27 155 views
0

我正試圖找到初始化設備驅動程序(由生產人員維護)的最佳方式。配置通常包含串行端口和其他信息,如果設備驅動程序的底層硬件發生變化,生產人員可能需要更改這些信息。使用依賴注入容器初始化可配置對象

例如

using System.IO.Ports; 

public class Scanner : IDriver 
{ 
    public SerialPort SerialPort { get; private set; } 
    public String Id { get; private set; } 
    public String DisplayName { get; private set; } 

    public Scanner(SerialPort serialPort, String id, String displayName) 
    { 
     SerialPort = serialPort; 
     Id = id; 
     DisplayName = displayName; 
    } 
} 

public class TestMethod 
{ 
    public Scanner MainScanner { get; private set; } 
    public Scanner SecondaryScanner { get; private set; } 

    public TestMethod (Scanner main, Scanner secondary) 
    { 
     MainScanner = main; 
     SecondaryScanner = secondary;  
    } 

} 

如何在運行時使用DI容器並仍然可以更改配置?我希望避免使用DI容器附帶的XML配置,因爲我期望生產人員經常修改這些(配置)文件。一個單獨的配置文件將是首選。

一種可能實現XML配置

<DeviceDrivers> 
    <Driver name="main" id="IX234" displayName="main scanner"> 
     <SerialPort name="serialPort" portName="COM8" baudRate="11560" parity="None" dataBits="8" stopBits="None"> 
    </Driver> 
    <Driver name="secondary" id="IX2E3" displayName="secondary scanner"> 
     <SerialPort name="serialPort" portName="COM9" baudRate="11560" parity="None" dataBits="8" stopBits="None"> 
    </Driver> 
</DeviceDrivers> 

SerialPort本身需要從配置文件intialised。

感謝

PS:我正在考慮Ninject,但不知道如果我能順利完成這件事。

回答

0

首先,我沒有在Ninject上工作,但對Unity有一些想法。其次,我希望我正確理解您的問題,您希望DeviceDrivers的提及的XML配置作爲生產人員無法訪問的單獨配置文件。

因此,對於上述情況,我認爲你必須有兩個不同的映射IDriver到掃描儀(都是最好姓名的人士稱,「主」和「次要」),並在這兩個,你可以指定初始化值在您的XML配置中也提到了SerialPort的實例。所有這些配置將成爲將被加載到Unity容器的單獨文件的一部分。要了解如何使用多個配置文件的配置加載容器,請參閱http://msdn.microsoft.com/en-in/library/ff660935(v=pandp.20).aspx

+0

不是真的,配置文件可由生產人員編輯。我不想讓他們暴露於統一語法,而只是簡單的可配置項目。我還發現[Unity配置架構](http://msdn.microsoft.com/en-au/library/ff660914(v = pandp.20).aspx#config_registerelement)更有用。 – resp78