zoukankan      html  css  js  c++  java
  • 关于跨程序集的反射(续)

        以前曾写过一篇“关于跨程序集的反射”的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加载非当前程序集中的类型,谁有成功的经验了?感谢分享下。
        
       

  • 相关阅读:
    枚举
    张三先唱一遍要表演的歌曲,老师觉得张三唱歌不过关,
    不断要求用户输入一个数字(假定用户输入的都是正整数
    不断要求用户输入学生姓名,输入q结束.
    要求用户输入用户名和密码,只要不是admin、888888就
    计算1到100的整数和
    c# 九九乘法表
    c#三角形
    C#循环判断密码
    什么是发动机号,发动机号码是什么?
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/312366.html
Copyright © 2011-2022 走看看