【问题标题】:How to run a static method in separate AppDomain?如何在单独的 AppDomain 中运行静态方法?
【发布时间】:2015-12-10 17:26:26
【问题描述】:

我在我的项目中使用了一些xpcom 组件。该组件不允许在同一个 Appdomain 中并发使用。

我可以在一个静态方法中限制我对该组件的使用:

public static class MyClass
{
    // This should run in another appdomain
    public static QueryResult Run(QueryParameter arg) 
    {

    }
}

QueryResultQueryParameter 都是不可变的可序列化类。

我真的不想在另一个进程中运行它,所以我认为可以在另一个 Appdomain 中运行它。

正确的做法是什么?

【问题讨论】:

    标签: c# .net appdomain


    【解决方案1】:

    只有对象可以跨应用域边界传递。静态方法本质上是函数指针。跨应用程序域边界引用函数指针有很多迂回的方法——但是,当您调用它时,它将在 调用 应用程序域中执行。那不是你想要的。相反,将函数包装在派生自 MarshalByRefObject 的(非静态)类中,然后调用包装器。

    【讨论】:

    • "有一些迂回的方法可以跨 appdomain 边界引用函数指针 - 但是,当您调用它时,它将在调用 appdomain 中执行。" - 我对这个很感兴趣。我想在 AppDomains 中加载“插件”程序集纯粹是为了可卸载性 - 我更喜欢在我的原始域中执行静态插件方法,而不直接引用它们的程序集。我不需要数据隔离。我无法找到这个样本,我怀疑这不是可能的。欢迎提出任何建议!
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多