Skip to content

Releases: PaulNonatomic/ServiceKit

2.0.2

18 Apr 00:07

Choose a tag to compare

Changed

  • Updated package description, keywords, and GitHub topics for discoverability
  • Added Unity version and MIT license badges to README

2.0.1

17 Apr 23:39

Choose a tag to compare

ServiceKit 2.0.1

Changed

  • Samples directory: Renamed Samples/ to Samples~/ following Unity package convention. Samples are now hidden from the project and importable via the Package Manager Samples tab.

2.0.0

17 Apr 20:01

Choose a tag to compare

ServiceKit 2.0.0

Major release replacing the generic ServiceKitBehaviour<T> pattern with attribute-based registration, adding fluent APIs, one-liner injection, and comprehensive race condition fixes.

Highlights

  • [Service] attribute replaces ServiceKitBehaviour<T> — cleaner declarations, multi-type registration, simpler inheritance
  • InjectAsync(this, token) — one-liner dependency injection with sensible defaults
  • Fluent registrationRegister(service).As<IFoo>().WithTags("core").Ready()
  • Inject() builder — shorter alias for custom injection configuration
  • Atomic TryResolveService — race-condition-free 3-state service resolution
  • Race condition hardening — fixes in GetServiceAsync, optional dependencies, UseLocator, and circular detection
  • Roslyn Analyzers 0.3.0 — SK003 catches [Service] type mismatches, SK005 catches missing base.Awake() calls

Breaking Changes

  • ServiceKitBehaviour<T> replaced with non-generic ServiceKitBehaviour + [Service(typeof(T))]
  • InjectServicesAsync() deprecated in favour of Inject() / InjectAsync()
  • API renames from v1: RegisteredIsServiceRegistered, ReadyIsServiceReady, etc.

Migration

// Before (v1.x)
public class AudioManager : ServiceKitBehaviour<IAudioService>, IAudioService { }

await locator.InjectServicesAsync(this)
    .WithErrorHandling().WithTimeout()
    .ExecuteWithCancellationAsync(destroyCancellationToken);

// After (v2.0)
[Service(typeof(IAudioService))]
public class AudioManager : ServiceKitBehaviour, IAudioService { }

await locator.InjectAsync(this, destroyCancellationToken);

See the README migration guide for full details.

1.0.0

17 Apr 19:57

Choose a tag to compare

ServiceKit 1.0.0

The first stable release of ServiceKit, featuring:

  • ServiceKitBehaviour<T> generic base class for MonoBehaviour services
  • Two-phase lifecycle: Register → Ready with async dependency injection
  • [InjectService] attribute for field-based dependency injection
  • Intelligent 3-state optional dependencies: Ready → inject, registered → wait, absent → skip
  • Circular dependency detection with path reporting and exemption support
  • Service tags for runtime organization and filtering
  • UniTask integration for zero-allocation async when available
  • Fluent injection builder: .WithTimeout().WithCancellation().ExecuteAsync()
  • ServiceKit Debug Window with scene-based grouping, search, and service inspection
  • Addressables support for loading ServiceKitLocator assets on demand
  • Memory-optimized object pooling for allocations
  • Comprehensive test suite for race conditions and edge cases