IQueryable を返すクエリ メソッドを含む汎用リポジトリがあります。私の呼び出しコードでは、次のようなことができます
_repository.Query<MyClass>(x=>x.EntityId == 1).Fetch(x=>x.MyClassChild).ToList()
ただし、呼び出しコードをテストすることはできません (私の知る限り)。だから私は次のことをしようとしています
public class Repository : IRepository
{
....
public FetchedResult<TQueried, TRelated> ThenFetch<TQueried, TFetch, TRelated>(INhFetchRequest<TQueried, TFetch> query, Expression<Func<TFetch, TRelated>> relatedObjectSelector)
{
INhFetchRequest<TQueried, TRelated> nhFetchRequest = query.ThenFetch(relatedObjectSelector);
return new FetchedResult<TQueried, TRelated>(this, nhFetchRequest);
}
public FetchedResult<TOriginating, TRelated> Fetch<TOriginating, TRelated>(IQueryable<TOriginating> query, Expression<Func<TOriginating, TRelated>> relatedObjectSelector)
{
INhFetchRequest<TOriginating, TRelated> nhFetchRequest = query.Fetch(relatedObjectSelector);
return new FetchedResult<TOriginating, TRelated>(this, nhFetchRequest);
}
}
--
public class FetchedResult<TQueried, TRelated>
{
private readonly IRepository _repository;
private readonly INhFetchRequest<TQueried, TRelated> _query;
public FetchedResult(IRepository repository, INhFetchRequest<TQueried, TRelated> query)
{
_repository = repository;
_query = query;
}
public FetchedResult<TQueried, TRelated> ThenFetch<TFetch>(Expression<Func<TFetch,TRelated>> relatedObjectSelector)
{
return _repository.ThenFetch(_query, relatedObjectSelector);
}
}
したがって、Fetch への最初の呼び出しは機能しますが、repositor.ThenFetch への呼び出しは INhFetchRequest クエリを受け取りますが、INhFetchRequest を返します。そのため、FetchedResult を使用して ThenFetch をもう一度呼び出すことはできません。
これが問題だと思います。この時点で私の脳はかなり分解されています。誰かが私に知らせるのを助けることができれば、私はより多くの、またはより良い情報を提供しようとすることができます.
これで、静的を使用してそれを実行できることがわかりましたが、ここでの私の目標は、Fetch の呼び出しをモックできるようにすることです。
ありがとう、
ライフ