Table of Contents

Getting Started

Installation

Add the required NuGet packages to your project:


#for domain layer
dotnet add package BytLabs.Domain

#For application layer
dotnet add package BytLabs.Application

# for infrastructure layer
dotnet add package BytLabs.DataAccess
dotnet add package BytLabs.DataAccess.MongoDB
dotnet add package BytLabs.Multitenancy
dotnet add package BytLabs.Observability

Basic Setup

1. Configure CQRS

services.AddCQS(options => {
    options.AddCommandHandler<YourCommand, YourCommandHandler>();
    options.AddQueryHandler<YourQuery, YourQueryHandler>();
});

2. Configure Multitenancy

services.AddMultitenancy(options => {
    options.AddResolver<YourTenantResolver>();
});

3. Set Up MongoDB Database

services.AddMongoDatabase(new MongoDatabaseConfiguration {
    ConnectionString = "your_connection_string",
    DatabaseName = "your_database",
    UseTransactions = true
});

4. Enable Observability

services.AddObservability(options => {
options.ServiceName = "YourService";
options.Version = "1.0.0";
});

Example Usage

Creating a Command Handler


public record CreateUserCommand(string Name, string Email) : ICommand<Guid>;

public class CreateUserCommandHandler : ICommandHandler<CreateUserCommand, Guid>
{
    public async Task<Guid> Handle(CreateUserCommand command, CancellationToken token)
    {
        // Implementation
    }
}

Working with Repositories

The framework provides a generic repository interface IRepository<TEntity, TKey> for MongoDB operations. Here's how to register and use repositories:

First, register the repository for your entity type:

services.AddMongoRepository<User, Guid>();

Next, inject the repository into your command handler:

public class CreateUserCommandHandler : ICommandHandler<CreateUserCommand, Guid>
{
    private readonly IRepository<User, Guid> _userRepository;

    public CreateUserCommandHandler(IRepository<User, Guid> userRepository)
    {
        _userRepository = userRepository;
    }

    ...
}

Next Steps

  • Review the API documentation for detailed information about each package
  • Check out the sample projects in the repository
  • Join our community for support and discussions