1

単一の実装を持つことができるように、Polly フレームワークの周りに汎用ラッパーを作成したいと考えています。それを達成するために、私は以下のコードを書きました

    private Policy GetPolicy(EType eType)
    {
        var policy = default(Polly.Policy);

        switch (eType)
        {                

            case EType.T:
                policy = Policy.Handle<SomeException>().Retry(n, x => new TimeSpan(0, 0, x));
                break;                
        }
        return policy;
    }  

そして、ラッパーメソッドの1つで上記のメソッドを使用しています

   public TOutput Execute<TOutput>(Func<TOutput> func, EType eType)
    {
        var policy = GetPolicy(eType);

        return policy.Execute(() => func());
    }

今それを消費するために、サンプルメソッドを書きました

       var handleError = new HandleError();
        var connection = handleError.Execute(() => factory.CreateConnection(), ExceptionType.Transient);

上記のすべてが正常に機能するまでは、パラメーターを受け取るメソッドで同じ呼び出しを開始するとすぐに、次のようにエラーがスローされます

     var handleError = new HandleError();
        handleError.Execute(() => channel.ExchangeDeclare(queueDetail.ExchangeName, ExchangeType.Fanout), ExceptionType.Transient);

     The type arguments for method 'HandleError.Execute<TOutput>(Func<TOutput>, ExceptionType)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
4

1 に答える 1