我应该将命令放在Autocad VB.NET项目中的哪个位置?

时间:2013-07-08 09:30:14

标签: .net vb.net autocad-plugin objectarx

我是Autocad编程的新手,几个月新的,但我设法编写了一个包含大约10个Autocad命令的应用程序。这些命令中的大多数都显示一个窗口,其他一切都是从该窗口完成的。我尝试将我的应用程序设为MVVM ..因为我在模型ViewModels视图和命令之间有几乎1对1的对应关系,所以我认为将命令放在MVVM的3个部分之一中是合适的。首先我决定将命令放在ViewModel中,然后我意识到我的命令只显示一个窗口,而ViewModel不应该处理窗口,所以我将命令移动到View的Codebehind。据我所知,只要它与严格的视图相关,就可以在代码隐藏中使用代码。然后我阅读了Autodesk提供的一些教程的CommandClass属性,我发现了这个:

  

CommandClassAttribute   此自定义属性类用于将类型标记为应用程序的命令类。应用程序可以指定一个且仅一个类型作为其命令类。 AutoCAD在具有此属性的类型上查找应用程序的命令方法。

这表明我应该有一个类来包含我的所有命令。然后我读了这个,证实了上述内容:

  

对于实例命令方法,为每个打开的文档单独实例化方法的封闭类型。

所以我在视图或视图模型中放置命令的第一种方法是完全错误的,因为我认为viewmodel实例除了运行命令之外没有做任何事情。然后我在ObjectARX的文档中读到了这个:

  

如果应用程序使用CommandClass属性,则必须为包含AutoCAD命令处理程序方法的每种类型声明此属性的实例。

这与上面引用的教程直截了当地相矛盾,并且还表明拥有多个类来处理命令是一种经批准的做法。

所有Autocad .NET教程都是具有一个类和一个命令的项目,因此您无需做出多少选择。

一些有经验的Autocad .NET开发人员是否可以提供一个最佳实践,或者至少可以在一个相当大的项目中管理Autocad命令?或者

1 个答案:

答案 0 :(得分:1)

在我的工作中,我将CommandClass属性附加到单个类,由我以前使用的向导提供。

在该命令类中,我放了命令,所有这些命令。 每个人都有CommandMethod属性。

所以他们没有附加到任何对象或视图(我真的认为这只能使用VBA,而不是.NET)

但是他们的代码没有写在那里,我使用不同的类来管理命令,所以主命令类的工作方式大多就像命令索引,每个命令在我为自己的目的而在不同的类中调用它各自的主体。 / p>

所以,在你的位置,我可能会MyCommands CommandClass使用所有命令。{1}} attibute。每个命令只是从下面的ViewCommands类调用命令体。

创建一个ViewCommands类(以及您需要的许多其他类,以使您的模型更容易)。 此类doesn't具有CommandClass属性,只有常规方法。 它将具有从CommandClass方法调用的命令的核心。

我从未尝试过使用多个CommandClass,我相信最好将所有命令集中在一个地方,以便更好地跟踪你的插件。