リフレクションを使用して 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