如何解决单独的.NET应用程序域中的实例使用相同的引用实例
|| 我正在通过单独的应用程序域创建两个实例(通过工厂),但最终它们使用的是相同的引用实例,而不是每个实例。引用的实例取决于非托管dll,这可能是原因吗? 如何验证两个实例实际上在单独的应用程序域中运行? AppDomain appDomain1 = AppDomain.CreateDomain(\"AD1\");
Factory factory1 = (Factory)appDomain1.CreateInstanceAndUnwrap(typeof(Factory).Assembly.FullName,typeof(Factory).FullName);
MyClass myInstance1 = factory1.CreateInstance();
AppDomain appDomain2 = AppDomain.CreateDomain(\"AD2\");
Factory factory2 = (Factory)appDomain2.CreateInstanceAndUnwrap(typeof(Factory).Assembly.FullName,typeof(Factory).FullName);
MyClass myInstance2 = factory2.CreateInstance();
MyClass对单例类的引用,该类对非托管dll中的代码具有依赖性。 myInstance1和myInstance2引用相同的单例实例,即使它们在单独的应用程序域中执行。
怎么可能?我如何验证它们实际上是单独的应用程序域?
解决方法
我相信您创建ѭ1的方式是可以的。但是,您没有通过简单地调用工厂来重定向代码以在其中运行。您需要杠杆
MarshalByRefObject
。此MSDN页面上有一个很好的示例AppDomain.ExecuteAssembly方法。这是重要的部分:
// Create an instance of MarshalbyRefType in the second AppDomain.
// A proxy to the object is returned.
var mbrt = (MyTypeWhichIsAMarshalByRef)
ad2.CreateInstanceAndUnwrap(
exeAssembly,typeof(MyTypeWhichIsAMarshalByRef).FullName);
// Call a method on the object via the proxy,passing the time
mbrt.SomeMethod(DateTime.Now);
// Unload the second AppDomain. This deletes its object and
// invalidates the proxy object.
AppDomain.Unload(ad2);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。