c# - ASP.NET Core 2.0 repository pattern with a generic base class -
i'm implementing repository pattern in asp.net core 2.0 application.
i have baserepository class follows:
public class baserepository<tentity> 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(); } }
then i've implemented 2 concrete repositories (i'm testing):
public class coursesubjectrepository : baserepository<coursesubject> { public coursesubjectrepository(applicationdbcontext context) : base(context) { } } public class themerepository : baserepository<theme> { public themerepository (applicationdbcontext context) : base(context) { } }
coursesubject , theme poco classes representing entities in ef core code first database.
to have repositories available in 1 place, i've implemented kind of factory (kid of because gets instances 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>(); } }
and @ startup configureservice:
services.addscoped<themerepository>(); services.addscoped<coursesubjectrepository>(); services.addscoped<repositoryfactory>();
now have 2 questions:
1.- way of implementing , consuming repository pattern on asp.net core?
2.- have many entities in database , want know if way add repositories create class each of them , add di .addscoped. mean, have generic class representing repositories (they'll have same methods), nice add class baserepository di , "somehow" concrete repository instance using this:
controllerconstructor(baserepository<theme> themes)
your repository implementation great, add defining interface baserepository , each of children, depend on abstraction , not implementation.
it not necessary define repository each table of database, 1 each entity or main table should created, dependent tables or value object can accessed browsing in properties of entity.
i think best way di repositories add them 1 one asp.net core scoped
Comments
Post a Comment