ICommandor 1.0.0

dotnet add package ICommandor --version 1.0.0
                    
NuGet\Install-Package ICommandor -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ICommandor" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ICommandor" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="ICommandor" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ICommandor --version 1.0.0
                    
#r "nuget: ICommandor, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ICommandor@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ICommandor&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=ICommandor&version=1.0.0
                    
Install as a Cake Tool

Commandor

Commandor - MediatR uchun zamonaviy, yuqori samaradorlikka ega alternative. ActualLab.Fusion va MediatR'dan ilhomlangan, Source Generator va Automatic Caching bilan.

.NET Tests License

โœจ Asosiy Xususiyatlar

  • ๐Ÿš€ Zero Boilerplate - Handler'larni yozish shart emas (Source Generator)
  • โšก Auto Caching - Query'lar avtomatik cache'lanadi (3-5x tezroq)
  • ๐Ÿ”ฅ Fusion Pattern - Dependency tracking va transitive invalidation
  • ๐Ÿ’พ GC-free Cache - LiteAPI.Cache (Rust-backed, ultra-fast)
  • ๐ŸŽฏ Type-Safe - To'liq compile-time xavfsizlik
  • ๐Ÿ”„ Command/Query Separation - [CommandHandler] va [QueryHandler]
  • ๐Ÿงช Production Ready - 29/29 test o'tgan, ishonchli

๐Ÿš€ Quick Start

1. O'rnatish

dotnet add package Commandor
dotnet add package Commandor.Generators

2. Command va Query yaratish

using Commandor;

// Commands (Write operations - cache invalidation)
public record CreateProductCommand(string Name, decimal Price) : IRequest<Product>;
public record UpdatePriceCommand(int Id, decimal Price) : IRequest;

// Queries (Read operations - auto caching)
public record GetProductByIdQuery(int Id) : IRequest<Product?>;

3. Service interface - Attribute bilan

public interface IProductService : ICommandorService
{
    [CommandHandler]  // โœจ Handler avtomatik yaratiladi!
    Task<Product> CreateProduct(CreateProductCommand cmd, CancellationToken ct = default);
    
    [CommandHandler]  // โœจ Cache'ni invalidate qiladi
    Task UpdatePrice(UpdatePriceCommand cmd, CancellationToken ct = default);
    
    [QueryHandler]    // ๐Ÿ”ฅ Natija avtomatik cache'lanadi!
    Task<Product?> GetProductById(GetProductByIdQuery query, CancellationToken ct = default);
}

4. Service implementation - Faqat business logic

public class ProductService : IProductService
{
    private readonly List<Product> _products = new();
    
    public Task<Product> CreateProduct(CreateProductCommand cmd, CancellationToken ct)
    {
        var product = new Product 
        { 
            Id = Random.Shared.Next(1000, 9999),
            Name = cmd.Name, 
            Price = cmd.Price 
        };
        _products.Add(product);
        return Task.FromResult(product);
    }
    
    public Task UpdatePrice(UpdatePriceCommand cmd, CancellationToken ct)
    {
        var product = _products.First(p => p.Id == cmd.Id);
        product.Price = cmd.Price;
        
        // Cache'ni invalidate qilish
        using (Invalidation.Begin())
        {
            _ = GetProductById(new GetProductByIdQuery(cmd.Id));
        }
        
        return Task.CompletedTask;
    }
    
    public Task<Product?> GetProductById(GetProductByIdQuery query, CancellationToken ct)
    {
        // Bu metod avtomatik cache'lanadi! โšก
        var product = _products.FirstOrDefault(p => p.Id == query.Id);
        return Task.FromResult(product);
    }
}

5. DI Setup

var services = new ServiceCollection();

// Commandor qo'shish
services.AddSingleton<ICommandor, Commandor.Commandor>();

// Service va auto-generated handler'larni ro'yxatga olish
services.AddCommandorService<IProductService, ProductService>();

var serviceProvider = services.BuildServiceProvider();

6. Ishlatish

var commandor = serviceProvider.GetRequiredService<ICommandor>();

// 1. Mahsulot yaratish
var product = await commandor.SendAsync(
    new CreateProductCommand("iPhone 15 Pro", 15000000));

// 2. Birinchi query - DB'dan (~1.5ms)
var p1 = await commandor.SendAsync(new GetProductByIdQuery(product.Id));

// 3. Ikkinchi query - CACHE'dan (~0.3ms) โšกโšกโšก 5x TEZROQ!
var p2 = await commandor.SendAsync(new GetProductByIdQuery(product.Id));

// 4. Narxni yangilash - cache invalidate
await commandor.SendAsync(new UpdatePriceCommand(product.Id, 14500000));

// 5. Keyingi query - yangi ma'lumot DB'dan
var p3 = await commandor.SendAsync(new GetProductByIdQuery(product.Id));

๐Ÿ“Š Performance

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Birinchi Query (DB):      ~1.5-2.0ms      โ”‚
โ”‚  Cached Query:             ~0.3-0.6ms      โ”‚
โ”‚  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€   โ”‚
โ”‚  Tezlashish:               3-5x            โ”‚
โ”‚  GC Pressure:              ZERO            โ”‚
โ”‚  Memory:                   Ultra-efficient  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐ŸŽฏ Command vs Query

Commands - Write Operations

[CommandHandler]  // โŒ Cache'lanmaydi
Task<Product> CreateProduct(CreateProductCommand cmd);

[CommandHandler]  // โšก Cache'ni invalidate qiladi  
Task UpdatePrice(UpdatePriceCommand cmd);

Xususiyatlari:

  • Ma'lumotlarni o'zgartiradi (Create, Update, Delete)
  • Cache'lanmaydi
  • Tegishli Query'larni invalidate qiladi

Queries - Read Operations

[QueryHandler]  // โœ… Avtomatik cache'lanadi
Task<Product?> GetProductById(GetProductByIdQuery query);

[QueryHandler]  // โœ… Avtomatik cache'lanadi
Task<List<Product>> GetAllProducts(GetAllProductsQuery query);

Xususiyatlari:

  • Faqat ma'lumot o'qiydi (Read-only)
  • Avtomatik cache'lanadi
  • Dependency tracking bilan
  • Transitive invalidation

๐Ÿ”ฅ Fusion Pattern - Dependency Tracking

Commandor ActualLab.Fusion'dan ilhomlangan dependency tracking mexanizmini ishlatadi:

// A โ†’ B bog'liqligi
var productList = await commandor.SendAsync(new GetProductListQuery());
// Ichida GetProductById chaqirilgan

// GetProductById invalidate bo'lsa
await commandor.SendAsync(new UpdatePriceCommand(1, 15000));

// GetProductList ham invalidate bo'ladi! (Transitive)
var updatedList = await commandor.SendAsync(new GetProductListQuery());

Computed Values

Har bir cached natija Computed<T> sifatida saqlanadi:

public interface IComputed<T>
{
    T Value { get; }                    // Cache'langan qiymat
    long Version { get; }               // Versiya (invalidation tracking)
    ConsistencyState State { get; }     // Consistent, Computing, Invalidated
    bool IsConsistent();                // Cache hali fresh?
    void Invalidate();                  // Cache'ni bekor qilish
    Task WhenInvalidated();             // Invalidation kutish
}

๐Ÿ’พ LiteAPI.Cache - GC-free Caching

Commandor LiteAPI.Cache 1.1.0 dan foydalanadi:

Afzalliklar

  • โšก Ultra-fast - Rust-backed native implementation
  • ๐Ÿง  GC-free - .NET garbage collector'ga ta'sir qilmaydi
  • ๐Ÿ”’ Thread-safe - Concurrent access safe
  • ๐Ÿ’พ Cross-platform - Windows, Linux, macOS
  • ๐Ÿš€ Production-ready - Battle-tested

Cache Key Format

ServiceType.MethodName(arg1, arg2, ...)

Misollar:
- ProductService.GetProductById(1)
- ProductService.GetAllProducts()
- UserService.GetUserByEmail("john@example.com")

๐Ÿ“Š Boshqa Kutubxonalar bilan Taqqoslash

Xususiyat Commandor MediatR Fusion
Handler Generation โœ… Avtomatik โŒ Qo'lda โœ… Avtomatik
Source Generator โœ… โŒ โœ…
Auto Caching โœ… โŒ โœ…
GC-free Cache โœ… โŒ โŒ
Dependency Tracking โœ… โŒ โœ…
Transitive Invalidation โœ… โŒ โœ…
Type Safety โœ… โœ… โœ…
Learning Curve โญโญ โญโญโญ โญโญโญโญ
Naming "o" ๐Ÿ˜Š "e" "e"

๐Ÿ—๏ธ Arxitektura

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Application Layer                              โ”‚
โ”‚  โ”œโ”€ await commandor.SendAsync(command)         โ”‚
โ”‚  โ””โ”€ await commandor.SendAsync(query)           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Commandor Core (ICommandor)                    โ”‚
โ”‚  โ”œโ”€ Request routing                             โ”‚
โ”‚  โ”œโ”€ Handler resolution (DI)                     โ”‚
โ”‚  โ””โ”€ Caching logic (Query'lar uchun)            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚                         โ”‚
โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CommandHandler   โ”‚  โ”‚ QueryHandler (Cached)   โ”‚
โ”‚ - Write ops      โ”‚  โ”‚ - Read ops              โ”‚
โ”‚ - No cache       โ”‚  โ”‚ - Auto cache            โ”‚
โ”‚ - Invalidation   โ”‚  โ”‚ - Dependency tracking   โ”‚
โ””โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
    โ”‚                         โ”‚
โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Source Generator (Commandor.Generators)       โ”‚
โ”‚  โ”œโ”€ Compile-time handler generation            โ”‚
โ”‚  โ”œโ”€ [CommandHandler] โ†’ Handler class           โ”‚
โ”‚  โ””โ”€ [QueryHandler] โ†’ Cached handler class      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Cache Layer                                    โ”‚
โ”‚  โ”œโ”€ LiteApiComputedCache (default, GC-free)   โ”‚
โ”‚  โ”œโ”€ CommandorMemoryCache (fallback)           โ”‚
โ”‚  โ””โ”€ ComputedRegistry (global tracking)        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿงช Testlar

dotnet test

Test Coverage

โœ… 29/29 Tests Passing

๐Ÿ“ Test Suites:
โ”œโ”€ CommandorTests (7 tests)         - v1 manual handlers
โ”œโ”€ GeneratorCommandorTests (5)      - v2 source generator
โ”œโ”€ CachingTests (14)                - Cache infrastructure
โ”‚  โ”œโ”€ CacheKeyBuilder (3)
โ”‚  โ”œโ”€ CommandorMemoryCache (4)
โ”‚  โ”œโ”€ Computed<T> (4)
โ”‚  โ”œโ”€ ComputedRegistry (2)
โ”‚  โ””โ”€ LiteApiComputedCache (1)
โ””โ”€ IntegrationTests (3)             - End-to-end workflows

โฑ๏ธ  Total Time: 1.17s

๐Ÿ“– Dokumentatsiya

๐Ÿ—‚๏ธ Proyekt Tuzilmasi

Commandor/
โ”œโ”€โ”€ Commandor/                      # Core library
โ”‚   โ”œโ”€โ”€ IRequest.cs                 # Request interfaces
โ”‚   โ”œโ”€โ”€ IRequestHandler.cs          # Handler interfaces
โ”‚   โ”œโ”€โ”€ ICommandor.cs               # Mediator interface
โ”‚   โ”œโ”€โ”€ Commandor.cs                # Core implementation
โ”‚   โ”œโ”€โ”€ CommandHandlerAttribute.cs  # Command attribute
โ”‚   โ”œโ”€โ”€ QueryHandlerAttribute.cs    # Query attribute (caching)
โ”‚   โ”œโ”€โ”€ ICommandorService.cs        # Service marker
โ”‚   โ”œโ”€โ”€ IComputed.cs                # Computed value interface
โ”‚   โ”œโ”€โ”€ Computed.cs                 # Computed<T> implementation
โ”‚   โ”œโ”€โ”€ IComputedCache.cs           # Cache abstractions
โ”‚   โ””โ”€โ”€ CacheKeyBuilder.cs          # Cache key generator
โ”œโ”€โ”€ Commandor.Generators/           # Source Generator
โ”‚   โ””โ”€โ”€ CommandHandlerGenerator.cs  # Roslyn generator
โ”œโ”€โ”€ Commandor.Example/              # Demo application
โ”‚   โ”œโ”€โ”€ Program.cs                  # Example usage
โ”‚   โ””โ”€โ”€ Services/
โ”‚       โ””โ”€โ”€ ProductService.cs       # Example service
โ”œโ”€โ”€ Commandor.Tests/                # Unit tests (29 tests)
โ”‚   โ”œโ”€โ”€ CommandorTests.cs           # v1 tests
โ”‚   โ”œโ”€โ”€ GeneratorCommandorTests.cs  # v2 tests
โ”‚   โ”œโ”€โ”€ CachingTests.cs             # Cache tests
โ”‚   โ””โ”€โ”€ IntegrationTests.cs         # E2E tests
โ””โ”€โ”€ README.md                       # Documentation

๐Ÿ”„ Migration: MediatR โ†’ Commandor

MediatR (Before)

// Command
public class CreateOrderCommand : IRequest<Order> 
{
    public string ProductName { get; set; }
    public int Quantity { get; set; }
}

// Handler (manual)
public class CreateOrderCommandHandler 
    : IRequestHandler<CreateOrderCommand, Order>
{
    public async Task<Order> Handle(
        CreateOrderCommand request, 
        CancellationToken ct)
    {
        // Business logic
    }
}

// DI
services.AddMediatR(cfg => 
    cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));

// Usage
await mediator.Send(new CreateOrderCommand { ... });

Commandor (After)

// Command (record)
public record CreateOrderCommand(string ProductName, int Quantity) 
    : IRequest<Order>;

// Service interface
public interface IOrderService : ICommandorService
{
    [CommandHandler]  // โœจ Handler avtomatik!
    Task<Order> CreateOrder(CreateOrderCommand cmd, CancellationToken ct = default);
}

// DI
services.AddSingleton<ICommandor, Commandor.Commandor>();
services.AddCommandorService<IOrderService, OrderService>();

// Usage
await commandor.SendAsync(new CreateOrderCommand("iPhone", 1));

Afzalliklar

  • โœ… 70% kam kod - handler sinflarini yozish shart emas
  • โœ… Record types - immutable, concise
  • โœ… Auto caching - query'lar uchun bepul
  • โœ… Type-safe - compile-time xavfsizlik

๐Ÿš€ Production Deployment

Best Practices

  1. Command/Query Separation - Doim ajrating
  2. Service per Aggregate - Har bir aggregate uchun alohida service
  3. Validation - Command'larni validate qiling
  4. Error Handling - Exception handling strategiyasi
  5. Logging - Muhim operatsiyalarni log qiling
  6. Monitoring - Cache hit/miss ratio kuzatish

ASP.NET Core Integration

// Program.cs
var builder = WebApplication.CreateBuilder(args);

// Commandor
builder.Services.AddSingleton<ICommandor, Commandor.Commandor>();
builder.Services.AddCommandorService<IProductService, ProductService>();
builder.Services.AddCommandorService<IOrderService, OrderService>();

// Controllers
builder.Services.AddControllers();

var app = builder.Build();
app.MapControllers();
app.Run();
// ProductsController.cs
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly ICommandor _commandor;
    
    public ProductsController(ICommandor commandor) => _commandor = commandor;
    
    [HttpPost]
    public async Task<IActionResult> Create([FromBody] CreateProductCommand cmd)
    {
        var product = await _commandor.SendAsync(cmd);
        return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
    }
    
    [HttpGet("{id}")]
    public async Task<IActionResult> Get(int id)
    {
        var product = await _commandor.SendAsync(new GetProductByIdQuery(id));
        return product != null ? Ok(product) : NotFound();
    }
}

๐ŸŒŸ Kelajak Rejalari

  • Distributed caching (Redis support)
  • Cache TTL (Time To Live)
  • Cache statistics va monitoring
  • GraphQL integration
  • OpenTelemetry tracing
  • Benchmarks (vs MediatR, vs Fusion)

๐Ÿค Hissa Qo'shish

Pull request'lar va issue'lar qabul qilinadi!

  1. Fork qiling
  2. Feature branch yarating (git checkout -b feature/AmazingFeature)
  3. Commit qiling (git commit -m 'Add some AmazingFeature')
  4. Push qiling (git push origin feature/AmazingFeature)
  5. Pull Request oching

๐Ÿ“„ Litsenziya

MIT License - LICENSE faylini ko'ring

๐Ÿ‘จโ€๐Ÿ’ป Muallif

Bu loyiha quyidagi texnologiyalardan ilhomlangan:

  • MediatR - Command/Query pattern
  • ActualLab.Fusion - Automatic caching va dependency tracking
  • LiteAPI.Cache - GC-free cache implementation

๐Ÿ™ Minnatdorchilik

  • Jimmy Bogard - MediatR yaratgani uchun
  • ActualLab team - Fusion pattern uchun
  • LiteAPI.Cache team - GC-free cache uchun

<div align="center">

โญ Agar loyiha foydali bo'lsa, GitHub'da star qo'yishni unutmang! โญ

GitHub stars

Commandor - Command va Query'laringizni boshqarish uchun eng oson va tez yo'l! ๐Ÿš€

</div>

Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 1,382 11/18/2025