最近在设计一个项目,用vs2008做。
程序需求:
要求灵活可随时定制的UI,即UI可以随时修改而无需编译即可运行。响应速度要足够快,像web那样点击按钮,http请求-响应然后刷新的方式肯定不够的。
根据使用需求可以可随时添加组合功能。
我的解决方法:
模块化,除了基本功能模块之外,其他功能开发好放在类库中,app应该可以自动加载。
界面使用webbrowser,表现形式是DHTML+JS,由JS调用各模块公布的接口方法。
遇到的问题:
据我所知webbrowser中JS调用可以有2种方式:
1.设置webBrowser1.ObjectForScripting = 某个对象;然后在js中直接调用window.external.对象方法;.
2.获取document对象的IExpando接口;然后使用反射add一个propery;关联这个propery和自己的对象;在js中调用 document.propery名字.对象方法.
我自己认为第二种方法好,可以动态附加多个对象供js调用,缺点没有办法在js调用对象方法之前做一些权限检查数据验证之类操作。
我最希望的方法是:js执行一个统一函数call c#代码,这个函数的参数包括js要调用的接口方法名以及相关参数,函数内然后根据对象方法名称动态检索所有加载的模块查找与js指定的方法名对应的接口方法(使用反射),然后根据其他信息校验参数权限验证后使用invokemember接口方法。
在写验证代码的时候我发现js调用c#方法时传递的参数如果是数组或者JSON类型,在调试器中看到的参数类型是System.__ComObject,无法获取更详细的信息了。
请大家给点意见。
最简单的方法:在js调用时把json对象转化成字符串传过去(提示:可以用for in取出js对象所有的属性名).