2017-06-15 11 views
0

WCF初心者が助けを求めています。私がここで間違って何をやっている: ICardServiceWCFの複合型エラー

[ServiceContract(Namespace = "http://xxxx.xxxxxx.xxxx/xx/xxxxxx")] 
interface ICardService 
{ 
    [OperationContract] 
    Coupon CreateCouponCard(string cardDefinitionCode); 
} 

public class CardService : ICardService 
    { 
     public Coupon CreateCouponCard(string cardDefinitionCode) 
     { 
      Coupon composite = new Coupon(); 

      if (composite == null) 
      { 
       throw new ArgumentNullException("composite"); 
      } 
      if (composite.BoolValue) 
      { 
       composite.PassTypeIdentifier="sdfsdf"; 
       composite.Icon.DisplayGroup = "czxczxczx"; 
      } 
      return composite; 
     } 
    } 

[DataContract(Namespace = "")] 
    public class Coupon : CardCommonDefinition 
     { 
      [DataMember] 
      public string Description {get; set;} 

[DataMember] 
public bool BoolValue 
     { 
      get { return boolValue; } 
      set { boolValue = value; } 
     } 

} 

[DataContract(Namespace = "")] 
    public class CardCommonDefinition 
    { 
     [DataMember] 
     public string PassTypeIdentifier {get; set;} 
    [DataMember] 
     public CardFieldDefinitionEntity Icon {get; set;} 
    } 

[DataContract(Namespace = "")] 
    public class CardFieldDefinitionEntity 
    { 

     [DataMember] 
     public string DisplayGroup {get; set;} 
} 

これを実行すると、composite.Icon.DisplayGroup = "czxczxczx"で失敗します。オブジェクトをオブジェクトのインスタンスに設定しないでください。

私はそれを解決する手掛かりはありません。どうすれば助けてくれますか?

+0

'DisplayGroup'プロパティを設定する前に、CouponオブジェクトのIconプロパティが初期化されていることを確認する必要があります。 –

答えて

2

これは2通りの方法で解決できます。

ワン - 使用前にIconプロパティを初期化します。

public Coupon CreateCouponCard(string cardDefinitionCode) 
{ 

    Coupon composite = new Coupon(); 
    if (composite == null) 
    { 
     throw new ArgumentNullException("composite"); 
    } 
    if (composite.BoolValue) 
    { 
     composite.PassTypeIdentifier="sdfsdf"; 
     composite.Icon = new CardFieldDefinitionEntity(); 
     composite.Icon.DisplayGroup = "czxczxczx"; 
    } 
    return composite; 
} 

二 - CardCommonDefinitionのコンストラクタを持っていて、それがnullであることを心配する必要がないように、それにIconプロパティを初期化します。

[DataContract(Namespace = "")] 
public class CardCommonDefinition 
{ 
    public CardCommonDefinition() 
    { 
     this.Icon = new CardFieldDefinitionEntity(); 
    } 
    [DataMember] 
    public string PassTypeIdentifier {get; set;} 
    [DataMember] 
    public CardFieldDefinitionEntity Icon {get; set;} 
} 

[DataContract(Namespace = "")] 
public class Coupon : CardCommonDefinition 
{ 
    public Coupon : base() 
    { } 
    [DataMember] 
    public string Description {get; set;} 
    [DataMember] 
    public bool BoolValue 
    { 
     get { return boolValue; } 
     set { boolValue = value; } 
    } 
} 
+0

このアプローチは本当にサービスを設計する最良の方法ですか?基本的には、DBからCardDefinitonEntityを受け取っています。どのタイプのカードを作成するのにも必要なすべてのフィールドがあります。私がしたいのは、カードの種類ごと(クーポン、イベント、メンバーシップ、ストアなど)のクラスと、それらのカードに固有のフィールドと、すべてのカードタイプの共通フィールドを持つ基本クラスです。しかし、使用する前にプロパティをインスタンス化するのはちょっと厄介なようだから、私が使ったアプローチが本当に正しいかどうかは分かりません。私はC#の新しいので多分それは私には厄介なようです。 – Ray

+0

どのようにインスタンス化するかは関係ありませんが、オブジェクトを使用する前にインスタンス化する必要があります。そうでなければ、確かにNullReferenceExceptionが発生します。このアプローチは、質問で提供した詳細に基づいて提案されています。データベースや他のクラスについての言及はありません。最適なソリューションをご希望の場合は、関連情報を提供する必要があります。 –

関連する問題