gpt4 book ai didi

c# - 使用反射调用实例方法抛出 TargetException。

转载 作者:太空宇宙 更新时间:2023-11-03 15:11:38 25 4
gpt4 key购买 nike

我有 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 });

我有一个异常(exception):

TargetException: The object does not match the target type.

在日志文件中,我看到创建了 UserStorageService 实例。我可以调用此类的静态方法,但实例方法不起作用。

最佳答案

您是否尝试使用 GetType 来确保您反射(reflect)的是准确的类型?

userStorageService.GetType().GetMethod("Add")

关于c# - 使用反射调用实例方法抛出 TargetException。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40989465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com