として使用したとき、私はその後、私は次のような方法インタフェースcontravariance型制約
public class RuleEngine<TContext>
{
public void Register<TRule, TSource, TResult>() // I would like to keep it just Register<TRule> but compiler would not let me
where TRule : ITransformationRule<TSource, TResult, TContext> {...}
}
を持つルールエンジンを持っているそして今、私がしたいことから
public interface ITransformationRule<in TSource, in TResult, in TContext> {...}
public class MyRule : ITransformationRule<object, object, object> {...}
インタフェースおよび派生型を持っていますそのルールをどこかで登録してください:
var engine = new RuleEngine<object>();
engine.Register<MyRule>(); // this fails to compile
engine.Register<MyRule, object, object>(); // this is OK
私はどのようにして1つのタイプのパーameter(MyRule)とTSourceとTResultを指定する必要はありませんか?私はそれから制約を落とすことができますが、私はそれを保つつもりです。
何がしなければ 'ます。public void登録()ここで、TRule:ITransformationRule <オブジェクト、オブジェクト、TContext> '? –
私はこのアプローチを試しましたが、うまくいきませんでした – Tamagochi