ASP.NET Core-2.0-repository-pattern eine generische Basis Klasse

Ich bin Implementierung der Repository-Muster in einer ASP.NET Core-2.0-Anwendung.

Ich habe eine BaseRepository-Klasse wie folgt:

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();
    }
}

Dann habe ich realisiert zwei konkrete repositories (ich Teste gerade):

public class CourseSubjectRepository : BaseRepository<CourseSubject>
{
    public CourseSubjectRepository(ApplicationDbContext context) : base(context)
    {
    }
}

public class ThemeRepository : BaseRepository<Theme>
{
    public ThemeRepository (ApplicationDbContext context) : base(context)
    {
    }
}

CourseSubject und Thema sind die POCO-Klassen repräsentieren Entitäten, die in EF-Core erste code-Datenbank.

Haben alle repositories in einem Ort, ich habe implementiert eine Art Fabrik (Kind, denn es ruft die Instanzen von DI-container):

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>();
    }
}

Und jetzt am Start configureService:

services.AddScoped<ThemeRepository>();
services.AddScoped<CourseSubjectRepository>();

services.AddScoped<RepositoryFactory>();

Nun habe ich zwei Fragen:

1.- Ist das eine gute Art und Weise der Umsetzung und die Nutzung der Repository-Musters auf ASP.NET Core?

2.- Ich habe viele Personen in meiner Datenbank und ich möchte wissen, ob der einzige Weg, um Ihre Repositories zu erstellen, die eine Klasse für jeden von Ihnen, und fügen Sie es in die DI mit .AddScoped. Ich meine, jetzt, dass ich eine generische Klasse, die für alle repositories (Sie werden die gleichen Methoden), es wäre schön, fügen Sie einfach die Klasse BaseRepository DI und "irgendwie" Holen Sie sich ein konkretes repository-Instanz, die mit so etwas wie dieses:

ControllerConstructor(BaseRepository<Theme> Themes)
Ich würde empfehlen, um zu vermeiden, generisches repository, das als anti-pattern.

InformationsquelleAutor MorgoZ | 2017-09-13

Schreibe einen Kommentar