2つの汎用パラメーターを持つ汎用メソッドがあります。以下のコードをコンパイルしようとしましたが、動作しません。 .NETの制限ですか?異なるパラメーターに複数の制約を設定することは可能ですか?
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, TResponse : MyOtherClass
これを行うことは可能ですが、構文が少し間違っています。コンマで区切るのではなく、制約ごとに where
が必要です。
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass
where TResponse : MyOtherClass
@LukeHによる主な答えに加えて、依存関係の挿入に問題があり、これを修正するのに時間がかかりました。同じ問題に直面している人のために、共有する価値があります:
public interface IBaseSupervisor<TEntity, TViewModel>
where TEntity : class
where TViewModel : class
この方法で解決されます。コンテナ/サービスでは、キーはtypeofであり、カンマ(、)
services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));
これはこれで言及されました answer 。
@LukeHによる別の使用法による主な答えに加えて、クラスの代わりに複数のインターフェイスを使用できます。 (1クラスおよびnカウントインターフェイス)このように
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, IMyOtherClass, IMyAnotherClass
または
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : IMyClass,IMyOtherClass