单独的.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);
    

要回复问题请先登录注册