昨天想在2005里动态的通过 dll的地全文件名和里面的类名来动态实例化..我用的方法可以把类型实例化出来.(我在监视器里可以看到)就是转换不了类型..(注:我的类继承了一个接口,我转换类型的时候,是把它转成 它继承的接口类型)谁成功过的请指教...

解决方案 »

  1.   

    是不是要实现petshop那样类似的结构?
    petshop 4.0 出来了,用刀赖特2.0写的,可以参考一下。
      

  2.   

    private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];
            private static readonly string orderPath = ConfigurationManager.AppSettings["OrdersDAL"];
            
            private DataAccess() { }        public static PetShop.IDAL.ICategory CreateCategory() {
                string className = path + ".Category";
                return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
            }        public static PetShop.IDAL.IInventory CreateInventory() {
                string className = path + ".Inventory";
                return (PetShop.IDAL.IInventory)Assembly.Load(path).CreateInstance(className);
            }        public static PetShop.IDAL.IItem CreateItem() {
                string className = path + ".Item";
                return (PetShop.IDAL.IItem)Assembly.Load(path).CreateInstance(className);
            }        public static PetShop.IDAL.IOrder CreateOrder() {
                string className = orderPath + ".Order";
                return (PetShop.IDAL.IOrder)Assembly.Load(orderPath).CreateInstance(className);
            }        public static PetShop.IDAL.IProduct CreateProduct() {
                string className = path + ".Product";
                return (PetShop.IDAL.IProduct)Assembly.Load(path).CreateInstance(className);
            }
      

  3.   

    to: 在监视器里如何看到你的类被实例化了?按理说动态实例化和静态实例化后的对象没什么区别啊,怎么会不能转换呢?把代码贴出来看看.
    -------------------2005 里的监视器,允许在里面调用..如 
    ((IMyInterface)Assembly.Load(path).CreateInstance(className)).exec();这样是可以的...我在exec()里写的是一个有"Find" Msg 的异常里的监视器告诉我已经触发了但在代码里强行转化就是不行
      

  4.   

    lookerBlue 的回答是比较专业的~!
    好好研究一下!~
      

  5.   

    lookerBlue   实现不了...因为我就是这么写的
      

  6.   

    petshop 4.0刚出来,还没亲自试过里面的代码,不过petshop4.0安装后运行没有问题,我想可能是你其它地方没设置好,比如缺少引用等等。下面代码没问题,我一直在用。
    注意使用的时候不仅要在项目中引用System.Reflection,文件头部也引用一下。public static IDAL_Ver2.IResource Create()
            {
                Assembly assembly = Assembly.Load("SqlServerDAL_Ver2");
                Type type = assembly.GetType("SqlServerDAL_Ver2.Resource");
                object obj = Activator.CreateInstance(type);
                return (IDAL_Ver2.IResource)obj;
            }
      

  7.   

    注意使用的时候不仅要在项目中引用System.Reflection,文件头部也引用一下。TO:lookerBlue文件头部?
      

  8.   

    他的意思是指 using ...zhouheng123456() :你能不能把你的代码简化一个,然后发上来看一下.