これが私のインターフェースの例です:
public interface IJob<T, R>
where T : IStep
where R : IDelivery
{
T Step { get; set; }
R Delivery { get; set; }
}
これが私の実装例です
public class ImageJob<T, R> : IJob<T, R>
where T : ImageStep
where R : ImageDelivery
{
public T Step { get; set; }
public R Delivery { get; set; }
}
ImageStepとImageDeliveryはどちらも、それぞれのインターフェイス (IStep、IDelivery) を実装しています。
今私がやろうとしているのは、すべてのリポジトリ メソッドのインターフェイスです。たとえば、次の方法を考えてみましょう。
public void CreateJob(IJob<IStep, IDelivery> job);
だから私は新しいものを作成します:
var job = new ImageJob<ImageStep, ImageDelivery>
{
...
}
そして、それをリポジトリ メソッドに渡そうとします。
repository.CreateJob(job);
そして、次のようなエラーが表示されます。
Unable to cast ImageJob<ImageStep, ImageDeliver> to type IJob<IStep, Idelivery>
なぜこれがエラーを投げているのか、誰かが私に説明できますか? 実装とインターフェースが完全に間違っていますか?
私がやろうとしていることに対するエレガントな解決策はありますか?
各ジョブを異なるステップや配信方法などで抽象化したいのですが、これは他の方法で可能ですか? それとも、何かが完全に欠けていますか?