c# – 是否可以判断一个对象是否在另一个AppDomain中运行?

c# – 是否可以判断一个对象是否在另一个AppDomain中运行?,第1张

概述我想知道我是否可以告诉我们创建了一个对象appdomain.这是一个单元测试,但也是有用的常识.我有以下几段代码(这是用于说明的示例代码). public Foo Create(){ AppDomainSetup appDomainSetup = new AppDomainSet { ApplicationBase = @"z:\SomePath" } App 我想知道我是否可以告诉我们创建了一个对象appdomain.这是一个单元测试,但也是有用的常识.我有以下几段代码(这是用于说明的示例代码).
public Foo Create(){    AppDomainSetup appDomainSetup =         new AppDomainSet { ApplicationBase = @"z:\SomePath" }    AppDomain appDomain =                   AppDomain.CreateDomain("Domainname",null,appDomainSetup);    return (Foo) appDomain.CreateInstanceAndUnwrap("MyAssembly","MyClass");}

然后我打电话

Foo myFoo = Create();

我想要做的是找出myFoo上的AppDomain方法将被调用,以测试Create方法实际上是否创建了一个新的AppDomain.我意识到我可以在Foo上添加一个方法

public class Foo{    public string appDomainname     {         get { return AppDomain.CurrentDomain.FrIEndlyname; }     }}

这将为我提供Foo运行的应用程序.我不认为这是一个优雅的解决方案,仅用于单元测试.如果有人可以帮助定义类似的方法,那将会很棒.

public string GetAppDomainnameWithDotNetWitchcraft(Foo myFoo){    // Insert voodoo here.}

编辑:
感谢您的回复和评论.我提出的问题已得到解答,评论帮助我意识到我的错误.我真正想要实现的是测试是否创建了一个新的AppDomain.

解决方法 好吧,你可以通过Remoting / Reflection做一些Spelunking,假设你完全信任.请注意,您必须访问私有属性,并且假设它唯一能找到的是远程应用程序域的远程处理:
var a = Create();    if (System.Runtime.Remoting.RemotingServices.IstransparentProxy(a))    {        var c = System.Runtime.Remoting.RemotingServices.GetobjRefForProxy(a);        var ad = c.Channelinfo.ChannelData[0];        var propDomainID = ad.GetType().GetProperty("DomainID",BindingFlags.NonPublic | BindingFlags.Instance);        var DomainID = propDomainID.GetValue(ad,null);    }

然后,您可以将该域ID与您自己的域名进行比较,以了解它是否在您的域中.请注意,如果它在您的域中,则不太可能输入if语句(试图考虑您自己域中的对象具有透明代理的情况).

总结

以上是内存溢出为你收集整理的c# – 是否可以判断一个对象是否在另一个AppDomain中运行?全部内容,希望文章能够帮你解决c# – 是否可以判断一个对象是否在另一个AppDomain中运行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1244887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存