2014-09-06 29 views
0

我是遊蕩裏面,如果我在某些DLL有這樣的代碼:檢查特定的擴展方法使用該方法

public class DemoClass 
{ 
    public void TestAction(XMParams command) 
    { 
     var firstName = command.Parse<string>(Params.First, "First Name"); 
     var lastName = command.Parse<string>(Params.Second, "Last Name"); 

     var userData = new UserDataDto{ 
      FirstName = firstName, 
      LastName = lastName 
     } 

     command.StoreValue(userData, "User Data"); 
    } 
} 

它是更多鈔票來檢測這些線路,其中command.Parse是使用,並且提取這些數據: command.Parse < 類型>(索引說明

command.StoreValue(類型,DescriptiveName);

進入這個看起來像這樣一個對象的列表:

public class InputParamObj 
{ 
    public int Index {get;set;} 
    public string Type {get;set;} 
    public string Description {get;set;} 
} 
public class OutputObj 
{ 
    public string Type {get;set;} 
    public string Description {get;set;} 
} 
public class CommandData 
{ 
    public List<InputParamObj> InputParams {get;set;} 
    public OutputObj Output {get;set;} 
} 

注意,這段代碼將始終處於「TestAction」裏面的方法例如已知的方法。

+0

聽起來好像不是反射任務。反射是一個元數據API,允許獲取關於類型,方法等的信息,而不是關於如何以及從何處調用它們。我想你想要的就是攔截,是另一個世界。請看這裏的這些技術的一個例子(http://msdn.microsoft.com/en-us/library/dn178466(v=pandp.30).aspx) – 2014-09-06 15:12:30

回答

1

你不想通過反射來做那種事。用MethodInfo.GetMethodBody()你可以得到用於方法實現的二進制IL流,但祝你好運。

你需要解析你的代碼。請查看this以查看一個不錯的解決方案列表。他們中的大多數都很好,這取決於您的實際需求。我個人會選擇Roslyn,這是微軟推出的新的「編譯器即服務」,因爲從我看來,這真是一個很棒的api:功能強大,編寫得很好。但它現在可能不適合您的需求。

+0

謝謝,我在看Mono.Cecil,這真的很棒! 我將不得不做一些手動和骯髒的工作,以得到我想要的,但它可以完成。如果我找到了更好的方法,我會告訴你。 – ShP 2014-09-06 20:12:53