【发布时间】:2016-12-06 06:52:17
【问题描述】:
我有 MyServiceLibrary.dll,它代表几个类,例如 UserStorageService、Storage、User。该服务包含一个存储并将用户保存到存储中。
我创建了一个新的控制台应用程序,其中包含新的应用程序域。
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 的实例。我可以调用这个类的静态方法,但是实例方法不起作用。
【问题讨论】:
标签: c# reflection appdomain