どういうわけか、別の AppDomain に渡されたデリゲートは、あたかも から派生したオブジェクトであるかのようにプロキシになると想定しましたMarshalByRefObject。残念ながら、そうではないようです。
私のコードで、次のMyClassようなクラスがあるとしましょう:
[Serializable]
public sealed class MyClass
{
public Func<Input, Output> SomeDelegate;
}
[Serializable]
public sealed class Input { ... }
[Serializable]
public sealed class Output { ... }
のインスタンスMyClassを別の AppDomain に渡す必要があります。
問題は、 に格納されているデリゲートに、ほとんどすべてのメソッドへの参照が含まれる可能性があることです。これには、から派生したものSomeDelegateでもない型のインスタンスのメソッドが含まれる可能性があります。[Serializable]MarshalByRefObject
この質問のために、デリゲートを作成するコードを変更することもMyClass、MarshalByRefObject. ただし、[Serializable]です。
(MyClassから派生した型のフィールドが含まれている場合MarshalByRefObject、そのフィールドに格納されているオブジェクトはプロキシに変換され、クラスの残りの部分はシリアル化されることに注意してください。)
クラスをシリアル化されたものとして渡すことができるようにするためにできることはありMarshalByRefObjectますか? (できれば AppDomain のセットアップで変更するMyClass必要がないようにしますが、デリゲートを作成するコードを変更する必要がない限り、クラスの変更を伴う提案も歓迎します。)