Welcome

首页 / 软件开发 / .NET编程技术 / 实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它

实现简单的CSharpShell -- OrcShell (2) 类型浏览、执行代码片断与其它2011-10-30 博客园 xiaotie二、类型管理

1、程序集与类型的管理

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

    public Context()    {      ……      TypeManager = new TypeManager();      Assemblys = new Dictionary<String, Assembly>();      Assembly[] al = AppDomain.CurrentDomain.GetAssemblies();      foreach (Assembly a in al)      {        AddAssembly(a);      }      AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);……    }private void AddAssembly(Assembly a)    {      if (a != null)      {        Assemblys.Add(a.FullName, a);        Type[] tl = a.GetTypes();        foreach (Type t in tl)        {          if(!t.FullName.StartsWith("<PrivateImplementationDetails>"))            TypeManager.AddType(t);        }      }    }    void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)    {      Assembly a = args.LoadedAssembly;      if (!Assemblys.ContainsKey(a.FullName))      {        AddAssembly(a);      }    }
开发时发现,程序集中有一批类型名字以"<PrivateImplementationDetails>"开头的类型,貌 似时临时类型,这些东西数量较多,干脆把它屏蔽掉了。