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本身需要从配置文件中初始化。

谢谢

PS:我正在考虑 Ninject,但不确定我是否可以成功。

4

1 回答 1

0

首先,我没有在 Ninject 上工作,但对 Unity 有一些想法。其次,我希望我正确理解了您的问题,您希望提到的DeviceDrivers的 XML 配置作为一个单独的配置文件,生产人员将无法访问。

因此,对于上述场景,我认为您必须有两个不同的IDriver到 Scanner 的映射(最好都命名为“Main”和“Secondary”),并且在这两种情况下,您都可以为SerialPort的实例指定初始化值在您的 XML 配置中提到。所有这些配置都将成为加载到 Unity 容器的单独文件的一部分。要查看如何使用来自多个配置文件的配置加载容器,请参阅http://msdn.microsoft.com/en-in/library/ff660935(v=pandp.20).aspx

于 2014-12-27T13:38:11.323 回答