1

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) 

答えて

0
  1. あなたのリポジトリの実装は素晴らしいですが、私はちょうどBaseRepositoryのためのインタフェースを定義する追加し、子どもたちのそれぞれ、抽象化していない実装に依存します。

  2. データベースの各テーブルにリポジトリを定義する必要はなく、各エンティティまたはメインテーブルに対して1つのみ作成する必要があります。依存テーブルまたは値オブジェクトにはエンティティのプロパティを参照してアクセスできます。

私はDIリポジトリのための最善の方法は、asp.netコアにそれらを一つずつ追加することだと思いますが

スコープ
関連する問題