c# - 尝试创建实例应用程序域

标签 c# applicationdomain

我正在尝试执行以下操作:

private static MyClass CreateMyClassInDomain(ApplicationDomain domain, string componentName, params object[] parmeters)
{
   var componentPath =  Assembly.GetAssembly(typeof(MyClass)).CodeBase.Substring(8).Replace("/", @"\");
   ObjectHandle inst = Activator.CreateInstanceFrom(domain, componentPath, "MyNsp." + componentName, true, BindingFlags.Default, null,
            parmeters, null, null);

   return (MyClass)inst.Unwrap();
}

我做错了什么吗?我创建成功,但在某些情况下尝试使用 MyClass 的实例后出现意外异常。

编辑: 找到了问题的根源,我一直在使用我在当前应用程序域中加载的dll 从其他应用程序域中创建实例并导致不一致

谢谢。

最佳答案

检查示例代码以加载不同域中的对象并执行工作。

如果在应用程序中引用了该组件 dll,则只能在不同的对象中加载该对象。

如果没有被引用,那就去反射(reflection)吧。

namespace MyAppDomain
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create an ordinary instance in the current AppDomain
            Worker localWorker = new Worker();
            localWorker.PrintDomain();

            // Create a new application domain, create an instance 
            // of Worker in the application domain, and execute code
            // there.
            AppDomain ad = AppDomain.CreateDomain("New domain");
            ad.DomainUnload += ad_DomainUnload;
            //ad.ExecuteAssembly("CustomSerialization.exe");

            Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "MyAppDomain.Worker");

            remoteWorker.PrintDomain();

            AppDomain.Unload(ad);
        }


        static void ad_DomainUnload(object sender, EventArgs e) 
        { 
            Console.WriteLine("unloaded, press Enter"); 
        } 

    }
}

public class Worker : MarshalByRefObject
{
    public void PrintDomain()
    {
        Console.WriteLine("Object is executing in AppDomain \"{0}\"", AppDomain.CurrentDomain.FriendlyName);
    }
}

关于c# - 尝试创建实例应用程序域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6291650/

相关文章:

c# - 为什么调用 AppDomain.Unload 不会导致垃圾回收?

C# 程序集加载和后期绑定(bind)

c# - 在 .net 中通过 ApplicationDomain 边界实现回调

c# - 如何使用不明确的泛型参数调用构造函数?

c# - 让网络中的客户端找到彼此

c# - 自定义绘制控件的糟糕表现

c# - 程序崩溃时捕获异常并妥善处理

c# - 将程序集加载到安全性较低的应用程序域中

c# - 显式接口(interface)实现不能是虚拟的

c# - 如何检查c#代码中死锁的可能性