繁体   English   中英

通过使用反射调用实例方法将抛出TargetException。

[英]The calling of an instance method by using reflection throws TargetException.

我有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实例。 我可以调用此类的静态方法,但是实例方法无效。

您是否尝试使用GetType来确保您反映了确切的类型?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM