2012-02-02 38 views
1

我有一个VB窗体,其中包含用于与要部署的机器上的某些硬件(摄像机,电机等)接口的控件,但我通常不在所述机器的位置(距离它3个小时的车程)。我试图在笔记本电脑上工作,但显然这些控件会产生各种各样的错误,因为他们无法与硬件通话。用于开发/测试的替代/禁用控制组件

我想用我自己的模拟控件类替换控件类型,然后使用#if指令来控制我是为真正的机器还是我的测试机器构建的。问题是,一些受影响的代码位于设计器生成的代码部分的表单中;表单设计器会自动尝试“更正”我的更改,因此我必须始终手动将它们全部置回,并尝试记住不要将表单设计器的编辑提交到版本控制中。

有关如何解决此问题的任何建议,或者可能采用不同的方法,以便我(和我的同事)可以在远离该网站的情况下工作?

我在VB2005工作。

回答

0

您可以使用Interface来解决这个问题。假设IHardware是界面,在这里定义您需要从视频相机等所有功能。现在在单独的类库中实现此接口。这个库将处理所有对你的硬件代码的调用。说这是WorkLibrary。现在在表单中,您将使用此界面拨打WorkLibrary

接口

interface IHardware 
{ 
    void Load(); //Example 
} 

类库

class WorkClass : IHardware 
{ 
    public void Load() 
    { 
    } 
} 

内,您的形式,调用Load方法,你会做

//Fully Qualified name of the WorkClass, you can store this in config file also 
string provider = "WorkLibrary.WorkClass, WorkLibrary"; 
IHardware hardWare = Activator.CreateInstance(Type.GetType(provider, true)); 
hardWare.Load(); 

在这种方法中,你不必参考WorkLibrary.dll在你的表单项目中,你只需要把它放入debugrelease文件夹。

这种方式可以完全分离硬件特定的东西。

的这个更有优势可以

  • 你可以写不同的硬件不同的库。
  • 您可以独立于消费者测试这些库。

希望这可以帮助你。

0

所有你需要的是使用控制反转模式。这是一种模式,您可以创建接口来定义类所需的方法,然后可以创建两个对象(或更多),即“真实”对象或模拟对象。

阅读全文here