2012-04-30 184 views
0

我正在使用CodeDom生成一個包含一些方法的類。我可以聲明屬性爲我的方法看起來當它創建了一個參數化單元測試什麼的Pex做類似:方法的自定義屬性聲明

[PexMethod] 
public void myMethod() 

不過,我想包括更多的東西給它喜歡:

[PexMethod (Max Branches = 1000)] 
public void myMethod() 

但我不能包括((Max Branches = 1000))。你能幫我一下嗎?

+0

如何使用的CodeDOM – Lijo

回答

2

屬性值中不能有空格,它們只是自定義屬性類中公共屬性的包裝器。例如:

public class TestAttribute : Attribute 
{ 
    public bool Enabled { get; set; } 
} 

而且你可以使用此類似這樣的

[TestAttribute(Enabled = true)] 
void Foo(){} 

如此以來,屬性映射到一個屬性它必須遵循正常的語法命名規則。

+0

我的壞添加[的TestFixture]的方法,實際上屬性應該沒有空格[PexMethod(MaxBranches = 1000)],但即使如此,你如何做到這一點與codeDom? – Peter

+0

對不起,彼得,不能幫助你那裏。我從來沒有使用過codeDom,但是如果屬性值有一個公共setter,並且它繼承自屬性類,你應該可以做到這一點。 – devshorts

+0

無論如何感謝您的反饋:) – Peter

2

我不知道你的問題是什麼,而是你可以簡單地設置the Value propertyCodeAttributeArgument

var method = 
    new CodeMemberMethod 
    { 
     Name = "MyMethod", 
     CustomAttributes = 
     { 
      new CodeAttributeDeclaration 
      { 
       Name = "PexMethod", 
       Arguments = 
       { 
        new CodeAttributeArgument 
        { 
         Name = "MaxBranches", 
         Value = new CodePrimitiveExpression(1000) 
        } 
       } 
      } 
     } 
    }; 
+0

非常感謝svick,我已經解決了我的問題。 – Peter

+0

我知道這是一個遠射,看到這個線程是2歲,但我如何創建與枚舉值的參數? [WebInvoke(方法= 「POST」,UriTemplate = 「MyTemplate的」,RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)] 我已經成功地做琴絃,但我不知道該怎麼做關於枚舉 - RequestFormat = WebMessageFormat.Json和ResponseFormat = WebMessageFormat.Json – Shaggydog

+0

此外,我將如何去創建這個[FaultContract(typeof(Collection ))] – Shaggydog

0
CodeAttributeArgument codeAttr = new CodeAttributeArgument(new CodePrimitiveExpression("Max Branches = 1000")); 
    CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration("PexMethod",codeAttr); 

mymethod.CustomAttributes.Add(codeAttrDecl);