そこで、いくつかの WCF サービスを作成しました。それぞれが特定の種類のデータ コントラクトのリストを返します。ただし、これらのデータ コントラクトには、他のデータ コントラクトのリスト プロパティがあります。データ コントラクト コレクションの遅延読み込みを実装しようとしています。
私が考えたのは、コレクション プロパティをオーバーライドしてデータ コントラクトから継承するクラスをクライアントに実装して、setter メソッドと getter メソッドがサービスを呼び出し、実際のコレクション アイテムを取得することです。
私の質問は: 実際のデータ コントラクトではなく、データ コントラクトを実装するクラスを返すようにベース チャネルを作成するにはどうすればよいですか? ベースチャネルが返すものを制御するにはどうすればよいですか?
私のサービスクライアントは次のようになります。
public class ServiceClient : BaseClient<IServiceClient>
{
public IList<DataObject> FindAll()
{
// how to control what base.Channel.FindAll return during deserialization.
return base.Channel.FindAll();
}
}
私はこのようなことをしたくないことに注意してください:
public class ServiceClient : BaseClient<IServiceClient>
{
public IList<DataObject> FindAll()
{
var dtos = base.Channel.FindAll();
var dtoProxies = Mapper.Map<DataObject, DataObjectProxy>();
return dtoProxies;
}
}
List<DataObject>
WCF が、どの要素が実際には type であるかを自動的に返すようにする方法が必要ですDataObjectProxy
。
これを行う方法に関する提案はありますか?
ありがとう!
編集:サンプル DataObject クラス:
[DataContract]
public class DataObject
{
public virtual List<OtherDomainObject> SubItems { get; set; }
}
public class DataObjectProxy : DataObject
{
public override List<OtherDomainObject> SubItems
{
get { // Custom way to retrieve collection... }
set { // Etc.. }
}
}