关于跨程序集的反射(续)

简介: 以前曾写过一篇“关于跨程序集的反射”的blog,关于跨程序集加载类型,文中使用的是方法是:先加载目标类型所在的程序集,再使用Assembly. GetType方法获取类型。文后Luna兄的评论说,可以直接使用Type.GetType(",")来加载类型,当初我查了MSDN,MSDN中也说到了这一点,我也就记住了这个解决方案。

    以前曾写过一篇“关于跨程序集的反射”的blog,关于跨程序集加载类型,文中使用的是方法是:先加载目标类型所在的程序集,再使用Assembly. GetType方法获取类型。文后Luna兄的评论说,可以直接使用Type.GetType("<<完全限定类名>>,<<程序集>>")来加载类型,当初我查了MSDN,MSDN中也说到了这一点,我也就记住了这个解决方案。但是,今天使用这种方式来跨程序集进行类型加载时,却始终返回null。难道MSDN有误?我不知道。(还望知道的仁兄告知,呵呵)。

    在Spring.net中,配置文件中,通常出现类似下面的配置项:

< object  name = " dataStreamHelper "  type = " DataCenterBase.Common.DataStreamHelper ,DataCenterBase " />

    配置中的“type”的值正好与Type.GetType方法的参数格式完全一致,于是我猜想Spring.net是使用了Type.GetType方法。我查看了Spring.net这块的源代码,出乎意料的是Spring.net并没有使用Type.GetType这个捷径,而仍然使用了Assembly.GetType方法。也不知道为什么,呵呵

    为了以后使用方便,我自己封装了一个静态方法,来支持任意类型的加载。

 1         #region  GetType
 2           //  assemblyName 不用带扩展名 ,如果目标类型在当前程序集中,assemblyName传入null    
 3           public   static  Type GetType( string  typeFullName , string  assemblyName)
 4          {
 5               if (assemblyName  ==   null )
 6              {
 7                   return  Type.GetType(typeFullName) ;
 8              }
 9 
10               // 搜索当前域中已加载的程序集
11              Assembly[] asses  =  AppDomain.CurrentDomain.GetAssemblies();
12               foreach  (Assembly ass  in  asses)
13              {
14                   string [] names  =  ass.FullName.Split( ' , ' ) ;
15                   if (names[ 0 ].Trim()  ==  assemblyName.Trim())
16                  {
17                       return  ass.GetType(typeFullName) ;
18                  }
19              }
20 
21               // 加载目标程序集
22              Assembly tarAssem  =  Assembly.LoadWithPartialName(assemblyName) ;
23               if (tarAssem  !=   null )
24              {
25                   return  tarAssem.GetType(typeFullName) ;
26              }
27 
28               return   null  ;
29          }
30           #endregion


    关于使用Type.GetType加载非当前程序集中的类型,谁有成功的经验了?感谢分享下。
    
   

目录
相关文章
|
2月前
|
C# 容器
C#中的命名空间与程序集管理
在C#编程中,`命名空间`和`程序集`是组织代码的关键概念,有助于提高代码的可维护性和复用性。本文从基础入手,详细解释了命名空间的逻辑组织方式及其基本语法,展示了如何使用`using`指令访问其他命名空间中的类型,并提供了常见问题的解决方案。接着介绍了程序集这一.NET框架的基本单位,包括其创建、引用及高级特性如强名称和延迟加载等。通过具体示例,展示了如何创建和使用自定义程序集,并提出了针对版本不匹配和性能问题的有效策略。理解并善用这些概念,能显著提升开发效率和代码质量。
85 4
|
开发框架 缓存 安全
C#OOP之十三 组件、程序集与反射
C#OOP之十三 组件、程序集与反射
67 0
|
存储 Java C#
30天C#基础巩固----程序集,反射
30天C#基础巩固----程序集,反射
104 0
30天C#基础巩固----程序集,反射