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のインスタンスが作成されたことがわかりました。このクラスの静的メソッドを呼び出すことはできますが、インスタンスメソッドは機能しません。