Implementing Repository Pattern & Service Layer
In this part, we implement the Repository pattern and Service layer for clean separation of concerns.
1. Generic Repository Interface
Define the generic interface in the Core Domain layer:
namespace Core.Interfaces;
public interface IAsyncRepository<T> where T : BaseEntity
{
Task<T?> GetByIdAsync(int id);
Task<IReadOnlyList<T>> ListAllAsync();
Task<T> AddAsync(T entity);
Task UpdateAsync(T entity);
Task DeleteAsync(T entity);
}
2. Register Service in DI Container
Add scoped lifetime for the repository:
builder.Services.AddScoped(typeof(IAsyncRepository<>), typeof(EfRepository<>));

