2011-06-20 10 views
0
[DataContract] 
public abstract class FooBase 
{ 
    [DataMember] 
    public int Bar { get; set; } 
} 

。ここで私はサービス参照...(MyServiceで)を追加]を選択しますPROJ1にかかわらず、問題...WCF - 元のコードをコピー/貼り付けしたり、共有抽象クラスの自動生成コードでDataContractを使用しますか?私もDataContractsている他のクラスの基本クラスとして使用し、基本クラスである

だとそれがFooBaseコードを含め、私のためのコードを生成します。 Proj2では、[サービス参照の追加...(OtherService)]を選択しますが、これも同じです。

しかし、私は両方のプロジェクトを参照することができ、それ自身のアセンブリにあるようにFooの基本クラスをしたい...ので、それはした方がよい:

コピー/それとして、他の共有アセンブリにFooBaseクラスを貼り付けますありますか?

[DataContract] 
public abstract class FooBase 
{ 
    [DataMember] 
    public int Bar { get; set; } 
} 

あるいは、コピー/他の共有アセンブリにFooBaseクラス用に生成されたコードを貼り付け?

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] 
[System.Runtime.Serialization.DataContractAttribute(Name="FooBase", Namespace="http://schemas.datacontract.org/2004/07/MyNamespace")] 
[System.SerializableAttribute()] 
[System.Runtime.Serialization.KnownTypeAttribute(typeof(MyNamespace.Proj1.TypeA))] 
[System.Runtime.Serialization.KnownTypeAttribute(typeof(MyNamespace.Proj1.TypeB))] 
public partial class FooBase : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { 

    [System.NonSerializedAttribute()] 
    private System.Runtime.Serialization.ExtensionDataObject extensionDataField; 

    private int BarField; 

    [global::System.ComponentModel.BrowsableAttribute(false)] 
    public System.Runtime.Serialization.ExtensionDataObject ExtensionData { 
     get { 
      return this.extensionDataField; 
     } 
     set { 
      this.extensionDataField = value; 
     } 
    } 

    [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] 
    public int Bar { 
     get { 
      return this.BarField; 
     } 
     set { 
      if ((this.BarField.Equals(value) != true)) { 
       this.BarField = value; 
       this.RaisePropertyChanged("Bar"); 
      } 
     } 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string propertyName) { 
     System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
     if ((propertyChanged != null)) { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

答えて

1

あなたは、共有ライブラリでそれを持つことができますが、サービス参照を追加すると、共有ライブラリが参照されていることを確認し、[参照の追加]ダイアログボックスの[詳細設定で、そのとき、あなたはすべての参照アセンブリで再利用タイプを選択しました。

私の好みは、共有ライブラリ内の非生成されたコードを使用することになり、それは単なるデータ契約を結んでいるコードです。

+0

まあはい、私は知っています。自動生成されたコードまたはサーバー上にある同じコードを使用する方が良いかどうかを確認していますか?基本的に、コード1またはコード2?私は自分の質問で、共有ライブラリに/またはそのどちらかを入れると述べました。ちょうど...私はどのような質問をしますか? –

+0

純粋な.Netソリューションの場合は、共有ライブラリを使用してください。 –

+0

ご迷惑をおかけして申し訳ありません。私の好みは、共有ライブラリ内の生成されていないコード、つまりデータ契約だけのコードを使用することです。 –

関連する問題