Googleで何も見つからず、約30分間集中的に検索した後、直接尋ねることにしたので、私がやりたいことが可能かどうかわかりません.
リポジトリ用のシンプルなインターフェースを定義しました
public interface IRepository<TEntity> : IDisposable
{
TEntity GetById(object id);
List<TEntity> GetAll();
}
今、最初のリポジトリを実装したいのですが、このように機能します
public class ContentRepository : IRepository<ContentPages>
{
private readonly Context _db = new Context();
public ContentPages GetById(object id)
{
var result = _db.ContentPages.Find(id);
return result;
}
public List<ContentPages> GetAll()
{
return _db.ContentPages.ToList();
}
public void Dispose()
{
_db.Dispose();
}
}
これは正常に機能しますが、リポジトリを mvc コントローラーに挿入すると、IRepository<ContentPages>
as パラメーター型が必要になり、IRepository
.
このようにジェネリック型を関数自体に移動しようとしました
public interface IRepository : IDisposable
{
TEntity GetById<TEntity>(object id);
List<TEntity> GetAll<TEntity>();
}
}
TEntity
これを行うと、実装でジェネリック型を定義する方法がわかりません
結論として、タイプを指定せずにインターフェイスを使用して、このように実際のオブジェクトからタイプを取得する必要があります
public constructor1(IRepository ContentRepository){}
次のコントローラーはこのコンストラクターを取得します
public constructor2(IRepository BlogRepository){}
等々
皆さんが理解できるように、私の問題を十分に詳しく説明できれば幸いです:)