2012-04-30 17 views
0

私はいくつかのメソッドを含むクラスを生成するためにCodeDomを使用しています。私はそれに多くのものを含めたいが似メソッドのカスタム属性宣言

[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を一度も使用していませんが、属性値にパブリックセッターがあり、属性クラスから継承する場合は、これを行うことができます。 – devshorts

+0

とにかくフィードバックのためにありがとう:) – Peter

0

MaxBranchesプロパティは基本クラス(PexSettingsAttributeBase)です。それはあなたが困っている理由かもしれません。間違った型に反映され、設定するPropertyInfoを見つけることができます。

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歳だとわかりますが、enum値で引数を作成するにはどうすればよいですか? [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);