WCF の DataContract 属性のついたクラスの汎用性
http://blogs.wankuma.com/rti/archive/2008/08/19/153479.aspx
の続きです。
「前回までのあらすじ」
アセンブリA(WcfServiceLibrary)
・アセンブリCを参照
・DataConstract 属性が付いたHogeClassを保有
アセンブリB(WcfClient)
・アセンブリCを参照
・アセンブリAをサービス参照することで HogeClass を利用
アセンブリC(Common Logic Library)
・ここでアセンブリAにあるHogeClass型を使いたい
・アセンブリCはアセンブリA,B から参照される
簡単に言うと、
DataConstract なオブジェクトを使いまわすには!?
ってことです。
その後、試してみた結果、どうやら インターフェイスなら DataContract 属性付きのクラスが継承できることがわかりました。
つまり、インターフェイスに格納した状態であれば DataContract 属性付きのオブジェクトを各アセンブリで使いまわして処理することができます。
こんな感じです。
namespace CommonLogicLibrary
{
public interface IRow
{
int Code { get; set; }
string Name { get; set; }
int Age { get; set; }
}
public class Row
{
public IRow Row { get; set; }
pubilc void ChangeAge() {
this.Row.Age = 18;
}
}
}
namespace WcfServiceLibrary
{
[DataContract]
public class Row : CommonLogicLibrary.IRow
{
[DataMember] public int Code { get; set; }
[DataMember] public string Name { get; set; }
[DataMember] public int Age { get; set; }
}
}
これによって、 インスタンスの生成については、WcfServiceLibrary か、サービス参照した WcfClient 側で行って、共通した処理は、CommonLogicLibrary の Row オブジェクトに行わせることができます。