none
如何通过反射在同一应用程序域访问不同程序集中已实例化的对象? RRS feed

  • 问题

  • 问题如上。以例子说明:假设我有一窗体应用程序项目A,引用了一个类库项目B,A的MyApplication类里有一个公共函数PFunction(),B项目中有一个类ClassB,现在我需要在运行时ClassB的代码能访问 A的已实例化的MyApplication对象里面的实例化函数PFunction()。我可以取得当前的AppDomain,可以通过反射区的所有 项目A的 Assembly,取得的MyApplication类并新创建另一个MyApplication对象,但就是没办法可以访问程序运行时已实例化的MyApplication对象,请问各位大神有没能解决我这个问题?非常感谢。
    2015年12月24日 21:52

全部回复

  • 你好,KeavoJoe

    你可以参考如下的链接了解如何使用反射调用另一个程序集中的方法。如这些解决方案所示,你需要使用invoke来调用。

    http://stackoverflow.com/questions/30094655/invoke-a-method-from-another-assembly

    http://stackoverflow.com/questions/6891752/c-sharp-using-assembly-to-call-a-method-within-a-dll

    Best Regards,

    Albert Zhang

    2015年12月25日 3:16
  • 你好,谢谢你解答我的问题。我仔细看了你给我链接的页面,但我觉得没能解答我的问题。那2个网页上说的是取得Assembly的详细资料后用CreatInstance方式构造出一个新的实例化的对象再调用对象的方法,而我需要的是调用已经存在的对象的方法或属性。在我举的例子中,程序运行后,在项目A的Assembly已经有一个实例化MyApplication的对象,项目A自动(引用)运行项目B,现在我想在项目B中的对象中对用项目A中的已经存在的MyApplication的非静态属性,而不是新构造一个MyApplication对象再调用新对象的属性。

    还是非常感谢你的解答。

    2015年12月28日 2:40
  • 你好,KeavoJoe

    如果你想要在项目B中找到项目A里面MyApplication类的已存在的实例,就必须要有对这个对象的引用。否则,就无法找到这个对象的实例了。你可以参考如下的类似的帖子。

    http://stackoverflow.com/questions/4183673/getting-all-the-object-implementing-an-interface-inside-an-application

    Best Regards,

    Albert Zhang

    • 已建议为答案 Caillen 2016年1月13日 1:45
    2015年12月28日 9:50
  •  你应该将MyApplication类设计为 类似单例,拥有自我对象引用的类型,这样你就可以从类型上获得当前对象引用。或者你应该通过一个第三方集合来保存MyApplication对象的引用。

    总而言之,你肯定需要一个引用才能获得你的对象,即使是最上层的根对象,你也可以通过一层层的引用关系遍历出你的对象。


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2016年2月25日 3:19
    版主