读取到SQLDLL 这一节点的value属性值之后,用Assemblly.Load来加载dll要引用的话,只能抽象成接口,程序依赖于接口,然后通过工厂一反射实例化具体类

解决方案 »

  1.   

     <add   key="WebDAL"   value="PetShop.SQLServerDAL"/>   
           
      private   static   readonly   string   path   =   ConfigurationManager.AppSettings["WebDAL"];   
        
      public   static   PetShop.IDAL.IProduct   CreateProduct()   {   
                string   className   =   path   +   ".Product";   
                return   (PetShop.IDAL.IProduct)Assembly.Load(path).CreateInstance(className);   
      }   
      

  2.   

    在执行中装载并实例化即可,要使用到反射空间System.Reflection下面的类
    例如,如果想访问类中的指定方法,应该这样做:
    //装载DLL
    System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile("dll文件路径");//获取DLL中的某个可访问类的类型
    Type type = asm.GetType("类的全名(包括命名空间)");
    if (type.Equals(null))
        return;//实例化这个类,也即声明一个该类型的变量aaa
    类的全名 aaa = type.GetConstructor(new Type[] { }).Invoke(null) as 类的全名;//执行类的这个实例对象某个方法
    type.GetMethod("方法名称").Invoke(aaa, 该方法的参数值列表);
      

  3.   

    Assemblly.Load来加载你配置文件中保存的dll路径信息//引用命名空间
    using System.Reflection;
    using 你SQLAccessing.DLL的命名空间; Assembly assem =Assembly.LoadFile("你xml文件存的路径信息");
                Type type = assem.GetType("你SQLAccessing.DLL的类名");
                if (type==null)
                    return;
                你SQLAccessing.DLL的类名 obj = type.GetConstructor(new Type[] { }).Invoke(null) as 你SQLAccessing.DLL的类名;//创建SQLAccessing.DLL的类的对象
                type.GetMethod("方法名").Invoke(obj, 方法参数列表);//方法参数列表是一个object[] parmears
      

  4.   


    我的SQLAccessing.Dll 并没有通过using 引用啊,需要在执行中引用啊
      

  5.   


    不用你添加引用,"你SQLAccessing.DLL的类名" 包括你的这个类的命名空间和类名。
      

  6.   

    哦  反射技术就是可以知道一个陌生的DLL中的可调用参数吗?