.net WPF GUI插件设计。我需要一个lil';反馈
我参与了一个项目,可以在运行中连接到不同的硬件设备。我们被指派制作一个触摸屏GUI,这样我们就有了设备的MMI 由于任何设备(以及任何类型的设备)都有可能连接到我们的框架,我们决定让第三方设备开发人员制作他们自己的GUI插件。到目前为止一切都很好:) 真正的问题是,我们的经理希望这些GUI能够执行某些形式的控制流,他不希望我们拥有自己的DSL——因此,当我们在WPF中执行GUI时,他们必须能够执行MSIL。这是一个巨大的安全威胁,我告诉过他,但作为一个原型,他说没关系。好吧,很好。.net WPF GUI插件设计。我需要一个lil';反馈,.net,wpf,plugins,.net,Wpf,Plugins,我参与了一个项目,可以在运行中连接到不同的硬件设备。我们被指派制作一个触摸屏GUI,这样我们就有了设备的MMI 由于任何设备(以及任何类型的设备)都有可能连接到我们的框架,我们决定让第三方设备开发人员制作他们自己的GUI插件。到目前为止一切都很好:) 真正的问题是,我们的经理希望这些GUI能够执行某些形式的控制流,他不希望我们拥有自己的DSL——因此,当我们在WPF中执行GUI时,他们必须能够执行MSIL。这是一个巨大的安全威胁,我告诉过他,但作为一个原型,他说没关系。好吧,很好。 不过还有另一
不过还有另一个问题-任意MSIL可能会崩溃或死锁,所以我们需要在某种异步上下文中托管它。由于WPF不允许多个线程访问GUI,因此我们将自己置于一个复杂的场景中 到目前为止,我对如何解决这个问题的想法还很缺乏。我的最佳选择是将GUI部分和代码部分分成两部分:GUI的原始Xaml,代码的MSIL托管在另一个线程中。然后,我需要创建一个facade(在运行时?),通过向其他线程发送调用将GUI和MSIL链接在一起。
我可以这样做,没问题,但我觉得它真的很臭。你强迫其他开发人员使用MVVM而不使用代码隐藏,我不确定我是否能支持所有绑定,我不喜欢视图和视图模型处于不同的线程中(嗯,我不介意,但我不确定它是否会引起问题,因为这个设计对插件开发人员来说是非常透明的,所以他不会考虑让数据变得安全)。
有人对如何设计它有什么想法吗?或者对需求有什么想法吗?任何形式的反馈都很好。这里可能有一条中间道路-你的老板不希望你创建自己的DSL,但是像IronPython/IronRuby这样的现有动态语言怎么样
我不确定这是否会给你带来你想要的灵活性,但这是值得研究的。我同意允许MSIL被注入是有问题的。我不确定将你的视图和视图模型分离到单独的线程中是否会起作用,更不用说干净的工作了。如果你想“正确”地做这件事,可以考虑在中托管插件单独的应用程序域。在托管应用程序的这些应用程序域上设置安全级别,并与定义良好的通道通信 如果你想完成它,使用插件架构,没有什么能比得上这种模式
希望这会有帮助,祝你好运!我会尝试给你一个不同的答案。不幸的是,我认为你不会很轻松。不过听起来确实很有趣:)
- 通过使用某种由您控制的应用程序启动代码,将插件托管在不同的应用程序中李>
- 使用此机制以您想要的方式设置安全性(不允许访问文件系统、internet等)
- 使用WCF和本地计算机二进制模式进行通信。无论如何,您都将提供某种API,因此这可能不会增加太多的开销
- 将插件托管在没有边框的窗口中,并手动将其放置在主应用程序窗口上。(我曾经参与过一个项目,我们使用一些Office应用程序来实现这一点。它可以非常好地工作)您可能会花费最多的时间来实现这一点。不过,一些小黑客会觉得自己像个英雄!:)李>
- 在DLL级别进行一些资源共享(UI蒙皮、外观、常用控件等等)