2014-01-16 122 views
2

我有一個web服務控制器,它具有公共靜態屬性,它們是web服務。 我使用反射來調用這些webservices上的方法。反射GetValue給出一個TargetException(非靜態方法需要一個目標)

當所有的webservice屬性都是靜態的時候,根本沒有問題。這個工作良好以調用在使用反射的webservicecontroller的方法:

Type wsControllerType = typeof(wsController); 
PropertyInfo WebserviceProperty = wsControllerType.GetProperty(wsName, Some bindingflags); 
MethodInfo method = WebserviceProperty.PropertyType.GetMethod(methodname); 
method.Invoke(WebserviceProperty.GetValue(null, null), parameters); 

的webservicecontroller被轉換爲一個單,所以靜態web服務屬性被刪除。

當我現在嘗試調用通過反射的方法,我得到的最後部分TargetException(WebserviceController.GetValue(NULL,NULL)。

我試過許多東西,但不能讓它開始工作。我想我錯過了一些簡單的東西..誰可以幫忙?

回答

6

爲了通過反射調用一個實例屬性,你將需要提供一個實例來處理。帖子提到WebServiceProperty已經變成了一個singleton所以只需使用單身價值

WebserviceProperty.GetValue(wsController.GetTheSingleton(), null) 

雖然我必須說,即使在這裏做反思似乎有點奇怪。您可以訪問wsController類型,因此您應該能夠靜態綁定到其所有成員。爲什麼不在這裏使用正常的非反射?

+0

謝謝,工作很棒..我只是沒有看到它。我的代碼示例完全被剝離以解決核心問題。 它在基類中用於爲傳遞的某些對象查找和調用方法。很難在1或2行中進行解釋,但是這爲每個課程節省了很多代碼,以便在此處使用反射。 –

相關問題