0
上に指定せずにジェネリック型を解決:Iは、インターフェイスの次の階層有する界面
public class Repository<TEntity> : IRepository<TEntity>
where TEntity : IEntity
{
public TEntity GetOne(object key) { ... }
}
:私のリポジトリ層で
public interface IEntity { object Key; }
public interface IEntity<TKey> { TKey TypedKey; }
を、私は現在ように定義GetOne
方法を有しますリポジトリの引数を、エンティティの汎用インタフェースで指定されたTKey
型に制約したいと思います。明白な解決策は次のようになります。
public class Repository<TEntity, TKey> : IRepository<TEntity, TKey>
where TEntity : IEntity<TKey>
{
public TEntity GetOne(TKey key) { ... }
}
これは動作しますが、リポジトリの作成、またはインタフェースを介して、それを注入する際に、明示的に処理鍵を指定するために私を必要とします。私は何をしたいのは、(次のコードは、しかし、動作しません)このようなものです:
public class Repository<TEntity> : IRepository<TEntity>
where TEntity : IEntity
{
public TEntity GetOne<TKey>(TKey key) where TEntity : IEntity<TKey> { ... }
}
は、クラスでそれを指定せずにIEntityの一般的なパラメータであることを処理鍵を制約することで、すべての可能ですか?もしそうなら、どうすればいいのですか?
'public classリポジトリ:IRepository ここで、TEntity:IEntity '? –
ColinM
@ColinMメソッドを 'GetOne(string)'として定義することもできます。要点は、キーがint、string、long、または複合オブジェクトであってもよいことです。 –