实现简单的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>"开头的类型,貌 似时临时类型,这些东西数量较多,干脆把它屏蔽掉了。