使用依赖项注入容器初始化可配置对象

时间:2014-12-27 10:24:21

标签: dependency-injection ninject interception

我正在尝试找到初始化设备驱动程序的最佳方法(由生产人员维护)。配置通常包含串行端口和生产人员在设备驱动程序的底层硬件更改时可能需要更改的其他信息。

e.g。

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,但不确定我是否可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

首先,我没有参与过Ninject,但对Unity有一些了解。其次,我希望我能正确理解你的问题,你希望 DeviceDrivers 提到的XML配置作为一个单独的配置文件,生产人员将无权访问。

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