Skip to content

Latest commit

 

History

History
95 lines (69 loc) · 3.39 KB

File metadata and controls

95 lines (69 loc) · 3.39 KB
RepositoryKit logo

RepositoryKit

Provider-agnostic, production-ready Repository & UnitOfWork infrastructure for modern .NET.
Clean. Modular. Mockable.
GitHubNuGet


🌍 What is RepositoryKit?

RepositoryKit is a modular, unified infrastructure for .NET projects
that provides a clean and extensible Repository & UnitOfWork abstraction.

  • EF Core, MongoDB and more: Swap your database backend with zero changes to your business logic.
  • Mockable & testable: Designed from scratch for modern dependency injection and testing.
  • Plug & play: Use only what you need—each provider is its own NuGet package.

📦 Packages

Package Description
RepositoryKit.Core Provider-agnostic abstractions/interfaces
RepositoryKit.EntityFramework Entity Framework Core implementation
RepositoryKit.MongoDb MongoDB implementation
RepositoryKit.Extensions Useful LINQ/collection extensions

🚀 Quickstart

1. Add a provider package:

dotnet add package RepositoryKit.EntityFramework
# or
dotnet add package RepositoryKit.MongoDb

2. Register with DI (EF example):

builder.Services.AddDbContext<AppDbContext>(...);
builder.Services.AddScoped<IUnitOfWork<AppDbContext>, EfUnitOfWork<AppDbContext>>();
builder.Services.AddSingleton<IUnitOfWorkManager, EfUnitOfWorkManager>();

3. Use in your app (Minimal API example):

app.MapGet("/products", async (IUnitOfWork<AppDbContext> uow) =>
{
    var repo = uow.GetRepository<Product>();
    var products = await repo.GetAllAsync();
    return Results.Ok(products);
});

4. Extensions for any collection/repository:

var distinct = products.SafeDistinct(p => p.CategoryId).ToList();
var firstOrNone = products.AsQueryable().FirstOrNone();

🧩 Why RepositoryKit?

  • Provider-agnostic: No more vendor lock-in
  • Test-friendly: Mock everything, everywhere
  • Production patterns: Real-world repository & UoW
  • Minimal boilerplate: Focus on your business logic

📚 Full Documentation

See individual package READMEs for full details:

🤝 Contributing

PRs, issues, and suggestions are all welcome!
Feel free to fork, star, or use for your next side project.

📜 License

MIT © Ataberk Kaya