リフレクションを使用して AppDomain でコードを実行しようとしています。これが私のコードです:
AppDomain appDomain = GetSomehowAppDomain();
string typeAssembly = GetTypeAssembly();
string typeName = GetTypeName();
object targetObject = appDomain.CreateInstanceAndUnwrap(typeAssembly, typeName);
MethodInfo methodInfo = targetObject.GetType().GetMethod(methodName);
object result = methodInfo.Invoke(targetObject, methodParams);
このコードが Web サイトで実行されている場合、すべて問題ありません。しかし、上記のコードを呼び出そうとする WCF サービスを呼び出すコンソール アプリケーションからこれを実行しているときはmethodInfo
、最後の行null
に到達しています。NullReferenceException
ちなみにtargetObject
はSystem.Runtime.Remoting.Proxies.__TransparentProxy
型であり、GoF パターンでプロキシする場合は、プロキシの元のソースである型のメンバーにアクセスできることを意味します。しかし、型targetObject
のメンバーはありませんtypeName
。
を使用targetObject.GetType().GetMethods()
して、7つの方法があることがわかりました。
- GetLifetimeService
- InitializeLifetimeService
- CreateObjRef
- ToString
- 等しい
- GetHashCode
- GetType
targetObject
タイプのプロキシであると予想されますWorkflowManager
。
public class WorkflowsManager : MarshalByRefObject, ISerializable, IDisposable, IWorkflowManager