Mostlylucid.Common 7.5.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Mostlylucid.Common --version 7.5.2
                    
NuGet\Install-Package Mostlylucid.Common -Version 7.5.2
                    
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="Mostlylucid.Common" Version="7.5.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Mostlylucid.Common" Version="7.5.2" />
                    
Directory.Packages.props
<PackageReference Include="Mostlylucid.Common" />
                    
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 Mostlylucid.Common --version 7.5.2
                    
#r "nuget: Mostlylucid.Common, 7.5.2"
                    
#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 Mostlylucid.Common@7.5.2
                    
#: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=Mostlylucid.Common&version=7.5.2
                    
Install as a Cake Addin
#tool nuget:?package=Mostlylucid.Common&version=7.5.2
                    
Install as a Cake Tool

Mostlylucid.Common

Shared abstractions, base classes, and utilities for Mostlylucid NuGet packages.

Features

Caching

Generic caching service abstraction with memory cache implementation:

// Register caching service
services.AddMemoryCachingService<MyData>(options =>
{
    options.DefaultExpiration = TimeSpan.FromMinutes(30);
    options.MaxEntries = 5000;
});

// Use in your service
public class MyService
{
    private readonly ICachingService<MyData> _cache;

    public async Task<MyData?> GetDataAsync(string key)
    {
        return await _cache.GetOrAddAsync(key, async () =>
        {
            // Fetch from source if not cached
            return await FetchFromSourceAsync(key);
        });
    }
}

Statistics Tracking

Base interfaces and implementations for service statistics:

public class MyService : IServiceStatistics
{
    private readonly ServiceStatisticsTracker _stats = new();

    public async Task<Result> ProcessAsync(Request request)
    {
        _stats.IncrementRequests();

        var cached = GetFromCache(request);
        if (cached != null)
        {
            _stats.IncrementCacheHit();
            return cached;
        }

        // Process...
    }

    public long TotalRequests => _stats.TotalRequests;
    public long CacheHits => _stats.CacheHits;
    public double CacheHitRate => _stats.CacheHitRate;
}

Periodic Update Service

Base class for background services that periodically update data:

public class MyUpdateService : PeriodicUpdateService
{
    protected override TimeSpan UpdateInterval => TimeSpan.FromHours(24);

    protected override Task<DateTime?> GetLastUpdateTimeAsync(CancellationToken ct)
    {
        return Task.FromResult(File.GetLastWriteTimeUtc("data.db") as DateTime?);
    }

    protected override async Task PerformUpdateAsync(CancellationToken ct)
    {
        await DownloadLatestDataAsync(ct);
    }
}

Configuration Interfaces

Standard options interfaces for consistent configuration:

public class MyOptions : ICacheableOptions, ITestableOptions
{
    public bool Enabled { get; set; } = true;
    public TimeSpan CacheDuration { get; set; } = TimeSpan.FromHours(1);
    public int MaxCacheEntries { get; set; } = 10000;
    public bool EnableTestMode { get; set; } = false;
    public string TestModeHeader => "X-Test-Mode";
}

Middleware Base

Base class for middleware with test mode support:

public class MyMiddleware : TestModeMiddlewareBase<MyResult>
{
    protected override string ResultKey => "MyResult";
    protected override string TestModeHeader => "X-Test-Mode";
    protected override bool IsTestModeEnabled => _options.EnableTestMode;

    protected override MyResult? CreateTestModeResult(string testValue)
    {
        return new MyResult { TestValue = testValue };
    }

    protected override async Task<MyResult?> ProcessRequestAsync(HttpContext context)
    {
        var ip = context.GetClientIpAddress();
        return await _service.ProcessAsync(ip);
    }
}

IP Address Extraction

Helper for getting client IP addresses with proxy/CDN support:

// Automatically checks CF-Connecting-IP, X-Forwarded-For, X-Real-IP, etc.
var clientIp = context.GetClientIpAddress();

Entity Interfaces

Standard interfaces for database entities:

public class CachedItem : ICachedEntity
{
    public string Key { get; set; }
    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }
    public DateTime ExpiresAt { get; set; }
    public bool IsExpired => DateTime.UtcNow > ExpiresAt;
}

OpenTelemetry Support

Base classes and helpers for OpenTelemetry instrumentation across all Mostlylucid packages:

using Mostlylucid.Common.Telemetry;

// Get all Mostlylucid activity source names for OpenTelemetry configuration
var sources = TelemetryExtensions.GetMostlylucidActivitySourceNames();
foreach (var source in sources)
{
    tracing.AddSource(source);
}

// Activity source names are available as constants
// ActivitySources.BotDetection = "Mostlylucid.BotDetection"
// ActivitySources.GeoDetection = "Mostlylucid.GeoDetection"
// etc.

Available telemetry utilities:

  • TelemetryActivitySource - Wrapper for System.Diagnostics.ActivitySource
  • TelemetryOptions - Configuration for telemetry behavior
  • TelemetryConstants - Standard attribute names following OpenTelemetry semantic conventions
  • TelemetryExtensions - Helper methods for service registration
  • ActivityExtensions - Extension methods for recording results and exceptions

Installation

dotnet add package Mostlylucid.Common

License

GNU AGPLv3

Product Compatible and additional computed target framework versions.
.NET 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 is compatible.  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 (5)

Showing the top 5 NuGet packages that depend on Mostlylucid.Common:

Package Downloads
mostlylucid.botdetection

Enterprise bot detection and anonymous entity resolution for ASP.NET Core — the detection engine behind StyloBot (https://stylo.bot). Probabilistic and behavioural, not just User-Agent matching: UA/header/IP analysis, JA3/JA4/HTTP2/QUIC/TCP-IP fingerprinting, Leiden cluster discovery, 129-dim Markov session vectors, metastable fingerprint identity, and optional LLM classification. Zero-PII (HMAC-SHA256), SQLite-backed, single-call UseStyloBot() setup.

mostlylucid.geodetection

Geographic location detection and routing middleware for ASP.NET Core applications with country-based routing and IP geolocation.

Mostlylucid.Ephemeral.Atoms.Llm

Meta-package for the Ephemeral LLM coordinator atom. References Mostlylucid.Ephemeral.Atoms.Llm.Abstractions (contracts) and Mostlylucid.Ephemeral.Atoms.Llm.Coordinator (runtime). Install this to get the full prompt / pick / invoke / writeback pipeline; reference .Abstractions alone if you only implement the contracts (net8.0/net9.0/net10.0).

Mostlylucid.Atoms.Ephemeral

Ephemeral LLM coordinator atom: a prompt / pick / invoke / writeback pipeline that drives scheduling-coordinated LLM calls. Depends only on Mostlylucid.Common scheduling and the Microsoft.Extensions abstractions.

Mostlylucid.Ephemeral.Atoms.Llm.Coordinator

Ephemeral LLM coordinator runtime: a tick-driven prompt / pick / invoke / writeback pipeline (EphemeralLlmCoordinator + AddEphemeralLlmCoordinator DI) built on the Llm.Abstractions contracts and Mostlylucid.Common scheduling.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.1.0-alpha0 48 7/6/2026
8.0.0-alpha2 281 7/3/2026
8.0.0-alpha1 67 7/2/2026
7.5.5 100 6/16/2026
7.5.3 98 6/16/2026
7.5.2 104 6/16/2026
7.5.1 123 6/16/2026
7.5.0 111 6/16/2026
7.0.1-alpha0 96 6/4/2026
7.0.0 123 6/1/2026
7.0.0-rc0 100 5/31/2026
7.0.0-alpha2 96 5/31/2026
7.0.0-alpha1 100 5/31/2026
7.0.0-alpha0 107 5/31/2026
6.9.0-alpha0 103 5/28/2026
6.8.9 109 5/26/2026
6.8.8 113 5/26/2026
6.8.6 108 5/26/2026
6.8.5 114 5/25/2026
6.8.4 107 5/25/2026
Loading failed