2016-12-06 14 views
2

私は、UserStorageService、Storage、Userなどのクラスをほとんど表さないMyServiceLibrary.dllを持っています。サービスにはストレージが含まれ、ユーザーをストレージに保存します。リフレクションを使用してインスタンスメソッドを呼び出すと、TargetExceptionがスローされます。

新しいコンソールドメインを持つ新しいコンソールアプリケーションを作成しました。

AppDomain masterDomain = AppDomain.CreateDomain("servicedomain"); 
string serviceLibraryPath = @"G:\Git\Service"; 
Assembly serviceAssembly = Assembly.LoadFrom(serviceLibraryPath); 

ここで私はすべてのタイプを使います。

Type userType = serviceAssembly.GetType("MyServiceLibrary.User"); 
Type storageType = serviceAssembly.GetType("MyServiceLibrary.UserStorage"); 
Type userStorageServiceType = serviceAssembly.GetType("MyServiceLibrary.UserStorageService"); 

これらのタイプの新しいインスタンスがmasterDomainに追加されました。

var storage = masterDomain.CreateInstanceFromAndUnwrap(serviceLibraryPath, storageType.FullName); 

var user = masterDomain.CreateInstanceFromAndUnwrap(serviceLibraryPath, userType.FullName); 

var userStorageService = masterDomain.CreateInstanceFromAndUnwrap(
        serviceLibraryPath, // assemblyFile 
        userStorageServiceType.FullName, // typeName               
        false, // ignoreCase               
        BindingFlags.CreateInstance, // bindingAttr                 
        default(Binder), // binder                
        new object[] {storage}, // args                 
        CultureInfo.CurrentCulture, // culture                 
        new object[] {} // activationAttributes 
      ); 

私が使用したすべてのタイプは、MarshalByRefObjectクラスから継承されています。 新しいユーザーを追加します。

MethodInfo addMethod = userStorageServiceType.GetMethod("Add"); 
addMethod.Invoke(userStorageService, new object[] { user }); 

私は例外だ:

TargetException:オブジェクトがターゲット・タイプと一致していませんが。

ログファイルで、私はUserStorageServiceのインスタンスが作成されたことがわかりました。このクラスの静的メソッドを呼び出すことはできますが、インスタンスメソッドは機能しません。

答えて

0

GetTypeを使用して正確なタイプを反映させてみましたか?

userStorageService.GetType().GetMethod("Add") 
関連する問題