web-dev-qa-db-ja.com

リクエストオブジェクトファクトリの実装を支援する

私の問題はここにあります。 REST apiにHTTPリクエストを送信するさまざまな種類のメソッドがあります。物事をきれいに保つために、さまざまな種類のリクエストオブジェクトをパラメーターとして受け取るメソッドがあります。以下の例をご覧ください。

Task<IEventResponse> FindEventAsync(IGetEventsRequest data, CancellationToken token);

したがって、コントローラーがこのメソッドを呼び出すたびに、IGetEventsRequest型のオブジェクトを作成する必要があります。その実装のnew()インスタンスを作成するのは馬鹿げていると感じ、私はこれらのオブジェクトを作成し、あらゆる種類のオブジェクトタイプでも機能する汎用ファクトリを作成することを考え始めました。どうすればこれを達成できますか?

私はこの種の構文を探しています:

await FindEventsAsync(_requestFactory.Create(?somehow specify the type of this and generate a new object based on the type), CancelationToken.None);
4
tjugg

なぜこれが難しいのか、私にはよくわかりません。以下は最小限の例です。

interface IGetEventsRequest
{
}

class SomeRequest : IGetEventsRequest
{
    //Your implementation here
}

class RequestFactory
{
    public T Create<T>() where T: IGetEventsRequest, new()
    {
        T o = new T();
        //Add initialization code here
        return o;
    }
}

class Example
{
    private readonly RequestFactory _requestFactory;

    public Example(RequestFactory requestFactory)
    {
        _requestFactory = requestFactory;
    }

    void Test()
    {
        await FindEventsAsync(_requestFactory.Create<SomeRequest>(), CancelationToken.None);
    }
}
1
John Wu