私はC#を初めて使用しています。ジェネリック代理人をコンストラクタに渡す方法を見つけようとしています。C#汎用代理人をコンストラクタに渡します
showエンドポイントを呼び出すとき、ページングがある場合、エンドポイントはPageインスタンスを返す必要があります。 Pageインスタンスを作成するときは、デリゲートメソッドをコンストラクタパラメータの1つとして渡す必要があります。 ShowsEndpointは多くのエンドポイントをホストし、これらのエンドポイントの多くはページネーションを使用します。すべてのエンドポイントを処理するクラスを1つだけ使用したいと思います。
public partial class ShowsEndpoints : Endpoint
{
public Func<Task<IEnumerable<object>>> FetchPopularShowsAsyncDelegate;
public Func<Task<IEnumerable<object>>> FetchTrendingShowsAsyncDelegate;
public Func<Task<IEnumerable<object>>> FetchMostWatchedShowsAsyncDelegate;
public async Task<IEnumerable<object>> FetchPopularShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new PopularShowsRequest(page, limit));
}
public async Task<IEnumerable<object>> FetchTrendingShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new TrendingShowsRequest(page, limit));
}
public async Task<IEnumerable<object>> FetchMostWatchedShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new MostWatchedShowsRequest(page, limit));
}
}
次のページがある場合、次のページをフェッチするためにデリゲートを呼び出すページクラス。
public class Page<TItem, TDelegate>
{
private TDelegate _delegateCommand;
public int CurrentPage { get; }
public int TotalPages { get; }
public int PageItemsCount { get; }
public int TotalItemsCount { get; }
public IEnumerable<TItem> Items { get; }
public Page(int page, int totalPages, int itemsCount, int totalItemsCount, IEnumerable<TItem> items, TDelegate delegateCommand)
{
CurrentPage = page;
TotalPages = totalPages;
PageItemsCount = itemsCount;
TotalItemsCount = totalItemsCount;
Items = items;
_delegateCommand = delegateCommand;
}
public bool HasNext()
{
return CurrentPage <= TotalPages;
}
public bool HasPrevious()
{
return CurrentPage >= 1;
}
public Page<TItem, TDelegate> Next()
{
// call _delegateCommand to fetch the next page items
}
public Page<TItem, TDelegate> Previous()
{
// call _delegateCommand to fetch the previous page items
}
}
可能でしょうか?
ありがとうございます。
EDIT
私はより良い私の質問を理解するために、私のクラスのコードを更新しました。 3つのエンドポイントがデリゲートに関連付けられており、Page
クラスでこれらの3つのデリゲートを同じコードで使用して重複を避けたいとします。したがって、_delegateCommand
は、FetchPopularShowsAsyncDelegate
,FetchTrendingShowsAsyncDelegate
またはFetchMostWatchedShowsAsyncDelegate
とすることができます。
をしていますが、このTDelegateがすべきことを指定/制限するために、where句を置く必要がありますあなたのクラスの中でそれを正しく使うことができるようにFuncなのです... [https://msdn.microsoft.com/en-us/library/bb384067(v=vs.100).aspx] –