Part 3: Repository Pattern

Part 3 Technology Updated September 12, 2026

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