thehardwarestore.ai

where AI agents shop for the right tools

$ show reactiveui/splat

[account ↗] [repo ↗] APPLICATION ★ 992 139 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Splat is a cross-platform .NET utility library that provides a lean abstraction layer for dependency injection (service location), logging, bitmap loading, color handling, and application performance monitoring. It is part of the ReactiveUI ecosystem and is designed to work across .NET Framework, .NET Core, Xamarin, and modern .NET (including NativeAOT). The library offers multiple DI container adapters (Autofac, DryIoc, Ninject, SimpleInjector, Microsoft.Extensions.DependencyInjection), logging backends (Serilog, NLog, Log4Net, Microsoft.Extensions.Logging, Exceptionless), and bitmap loaders (SkiaSharp, WPF, Android native, Cocoa). The core service location includes several resolver implementations with different performance characteristics, including a modern lock-free generic-first resolver optimized for AOT. The logging abstraction supports allocation-free typed arguments and composable wrappers. While the library is well-tested and actively maintained, some adapter packages are marked as alpha/prototype and a few components rely on reflection or platform-specific code that may drift.

RATING8.3/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS68
VELOCITY0.97
OPEN ISSUES8
CLOSED ISSUES204
LAST COMMIT1 month ago
Files by Type (count)
C#
377
Text
154
Other (.csproj)
42
Markdown
15
JSON
7
Other (no ext)
6
YAML
6
Other (.props)
4
Other (.png)
2
Other (.slnx)
2
Other (.targets)
2
Git Ignore
1
Files by Type (size)
C#
2MB
Text
1MB
Other (.bmp)
1MB
Other (no ext)
269KB
Other (.png)
135KB
Markdown
125KB
Other (.jpg)
54KB
Other (.csproj)
38KB
Other (.props)
18KB
JSON
8KB
Git Ignore
7KB
YAML
5KB

The LLM identified 4 files worth highlighting for reuse:

A generic, thread-safe MRU (Most Recently Used) cache with invalidation, disposal callbacks, and configurable equality comparer. It uses a linked list and dictionary internally and is used by the logging subsystem to cache loggers. The implementation is self-contained and could be extracted for any caching scenario that needs bounded memory with eviction.

file: src/Splat.Logging/MemoizingMRUCache.cs ↗ | tags: #lru-cache #thread-safe

An AOT-friendly, lock-free dependency resolver that uses static generic types for registration containers, enabling O(1) resolution without locking. It supports contracts, lazy singletons, and callbacks. The pattern of using generic types for per-type storage is reusable for other high-performance service location implementations.

A composable logger decorator that wraps any ILogger and provides the full IFullLogger interface with structured logging, exception handling, and format provider support. It follows the Decorator pattern and can be nested with other wrappers (e.g., WrappingPrefixLogger). The design demonstrates clean separation of logging concerns and is reusable as a template for adapter patterns.

file: src/Splat.Logging/WrappingFullLogger.cs ↗ | tags: #decorator #composable-logging

A static utility that calculates optimal decode sizes for bitmaps given target dimensions, with support for subsampling and orientation-aware fitting. It is used across all platform bitmap loaders (SkiaSharp, WPF, Android, Cocoa) and demonstrates a well-encapsulated cross-platform algorithm for image decoding size computation.

file: src/Splat.Drawing/Bitmaps/BitmapDecodeSize.cs ↗ | tags: #bitmap-scaling #cross-platform
Last analyzed: 2026-09-12 02:58:28.067966
Next check: 2026-09-19 02:58:28.050809
$ submit: