ASP.NET Core 2.0アプリケーションでリポジトリパターンを実装しています。ASP.NETコア2.0のリポジトリパターン(汎用ベースクラス)
私は次のようにBaseRepositoryクラスを持っている:
public class CourseSubjectRepository : BaseRepository<CourseSubject>
{
public CourseSubjectRepository(ApplicationDbContext context) : base(context)
{
}
}
public class ThemeRepository : BaseRepository<Theme>
{
public ThemeRepository (ApplicationDbContext context) : base(context)
{
}
}
CourseSubjectとテーマは、実体を表すPOCOクラスです:
public class BaseRepository<TEntity> where TEntity : class
{
private ApplicationDbContext _context;
private DbSet<TEntity> _entity;
public BaseRepository(ApplicationDbContext context)
{
_context = context;
_entity = _context.Set<TEntity>();
}
public IList<TEntity> GetAll()
{
return _entity.ToList();
}
public async Task<IList<TEntity>> GetAllAsync()
{
return await _entity.ToListAsync();
}
}
その後、私は2つのコンクリートのリポジトリ(私はテストしています)を実装しましたEFコアコードの最初のデータベースでスタートアップconfigureServiceで
public class RepositoryFactory
{
public RepositoryFactory(IServiceProvider serviceProvider)
{
_provider = serviceProvider;
}
private IServiceProvider _provider;
public ThemeRepository GetThemeRepo()
{
return _provider.GetService<ThemeRepository>();
}
public CourseSubjectRepository GetCourseSubjectRepository()
{
return _provider.GetService<CourseSubjectRepository>();
}
}
そして今:
1つの場所で利用可能なすべてのリポジトリを持っているために、私は工場(それはDIコンテナからインスタンスを取得するための子供)のいくつかの種類を実装しましたservices.AddScoped<ThemeRepository>();
services.AddScoped<CourseSubjectRepository>();
services.AddScoped<RepositoryFactory>();
今、私は2つの質問がある:
1.-が、これはASP.NETコア上のリポジトリパターンを実装し、消費するのは良い方法ですか?
2.私のデータベースには多くのエンティティがあり、リポジトリを追加する唯一の方法は、それぞれのクラスを作成して.AddScopedでDIに追加するかどうかを知りたいのです。つまり、私はすべてのリポジトリを表すジェネリッククラスを持っているので(同じメソッドがあります)、DIにクラスBaseRepositoryを追加して、どういうわけか、具体的なリポジトリインスタンスを次のように使用するといいでしょう:
ControllerConstructor(BaseRepository<Theme> Themes)