二、类型管理

1、程序集与类型的管理

Context初始化时便将AppDomain中的类型全部加载并交给TypeManager管理:


实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它        public Context()

开发时发现,程序集中有一批类型名字以"<PrivateImplementationDetails>"开头的类型,貌似时临时类型,这些东西数量较多,干脆把它屏蔽掉了。

2、进出命名空间

CdClassCmdHandler 中实现,目前不支持级联操作,即:cdc ..cdc .; cdc namespaceName这样是可以的,cdc ../ns1/ns2 这样是不支持的。输入的命名空间名称可以只是部分,程序自动进行匹配,如只有1个匹配项则自动进入该项,否则不进行操作,同时打印所有匹配项。

3列出命名空间和类型

ListClassCmdHandler 中实现,支持正则表达式匹配。幕后工作由TypeDictionary在做:


实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它            Context.TypeManager.Now.ListDir(match);
实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它            Context.TypeManager.Now.ListType(match);
实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它

实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它        public void ListType(String match)

4、查看类型

扩展方法确实是好东西,有了它这里实现起来很简单。在 ClassExtensionMethods 实现:

实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它    public static class ClassExtensionMethods


三、执行代码片断

CscCmdHandler 实现。核心方法为 CscCmdHandler.Run(),代码如下:


实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它       public override void Run()

其中 CodeProviderCompilerParameters   Context 中初始化:


可以通过 Save(String name, Object obj) My(String name) 来同环境进行交互。其中,Save(String name, Object obj) 是将代码片断中的对象 obj 保存为环境变量,变量名称为 nameMy(String name)取出名称为name 的环境变量,加载到代码段上。my 指令可以查看所有环境变量。

采用$name的方式操作环境变量更简介、直观,但这样一来代码难度加大不少,没想到什么简洁的实现,就没采用。

四、其它

1、扩展方法

对于常用的方法通过扩展方法来方便使用。如,打印一个对象 obj 到控制台上,正常写法是 System.Console.WriteLine(obj.ToString()),比较麻烦,通过扩展方法,可以使它简化为:obj.p();相关代码如下:


实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它    public static class ClassExtensionMethods

2、变量缩写(Alias)

指令缩写可明显降低操作量。可通过编辑程序集目录下的 Alias.xml 文件来添加、删除或更改指令缩写。

Alias 指令可以查看目前的指令缩写。

五、缺乏的功能。

到现在为止,OrcShell只实现了Shell的雏型。由于只开发了一个晚上,测试也不是很完善,另外许多重要功能还未涉及,主要包括:

1、手动加载程序集;

2、常用系统管理功能,如常用的Shell 指令;

3、远程控制;

4、指令的自动完成。

留待后续。

 

相关文章:

  • 2021-06-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2021-05-24
猜你喜欢
  • 2022-02-25
  • 2021-10-27
  • 2022-03-04
  • 2022-12-23
  • 2022-01-01
  • 2022-12-23
相关资源
相似解决方案