Skip to main content

Changelog

The breaking changes, features, bug fixes and performance improvements of each release, generated from the GitHub releases. Dependency updates and internal changes are left out.

Latest release0.10.0 Nov 6, 20263 breaking changes3 features6 fixes
Before 1.0, a minor release can contain breaking changes. Each one is marked in red and links to its pull request.

What changes when I upgrade?

→ latest 0.10.0
3 breaking changes3 features6 fixes
Breaking changes to handle
  • 0.10.0Identify a lifecycle hook by its declaring type when registrations of one implementation coalesce#266
  • 0.10.0Self-compile module registrations of implementations another assembly cannot construct#270
  • 0.10.0Identify an open generic factory's closing by its member#271
Breaking changesFeaturesFixesPerformance
2026

Version 0

11 releases · Jun 2026 to Nov 2026

229 commits21 breaking changes68 features18 fixes3 performance improvements
Nov 6 2026
0.10.0Latest3 breaking
14 commits3 breaking changes3 features6 fixes
12 changes
Breaking changes · 3
  • Identify a lifecycle hook by its declaring type when registrations of one implementation coalesce #266
  • Self-compile module registrations of implementations another assembly cannot construct #270
  • Identify an open generic factory's closing by its member #271
Features · 3
  • Warn when a typed Resolve<T>() on the generated container throws at run time #262
  • Let a container extend another container with [Container(Extends = typeof(...))] #265
  • Check keyed and typeof resolves on the generated container for AWT218/AWT219 #267
Fixes · 6
  • Build the decorators of an eager singleton at startup #259
  • Close open generics for factory parameters and every wrapped parameter shape #260
  • Identify a Factory or Instance registration without an implementation type by its member #263
  • Report private nested registrations as AWT216 instead of emitting code that fails with CS0050. #261
  • Close open generics for decorator and composite constructor parameters #268
  • Ask the host when resolving an imported service directly from the container #272
Nov 4 2026
18 commits

No user-facing changes

Oct 30 2026
0.8.013 breaking
87 commits13 breaking changes8 features6 fixes1 performance improvement
28 changes
Breaking changes · 13
  • Name public types by role and rename AwaitenLifetime and IExternalResolverHost #183
  • Keep disposing a scope after a release hook or Dispose throws #200
  • Make IAwaitenScope async-disposable and return the concrete scope from CreateScopeAsync #202
  • Make the external resolver settable without casts and set-once #203
  • Merge container metadata into IAwaitenRoot, add GetResolvability and AWT205 #204
  • Align the MS.DI bridge API around AddAwaitenContainer and a container builder #205
  • Reject [Arg] on properties at compile time and document the declaration rules #206
  • Align the Lifetime values with MS.DI ServiceLifetime #214
  • Replace SyncResolveAfterInit with an AsyncSafety enum #218
  • Rename the MS.DI external resolver and make the resolver assignment explicit #219
  • Dispose async-only services on netstandard2.0 #216
  • Reject projecting SuppressDisposal services into MS.DI #222
  • Close open generic registrations for injected properties and hook parameters #229
Features · 8
  • Answer IServiceProviderIsService from the container metadata #133
  • Let a caller ask why a service is withheld, without throwing #138
  • Give the typeof registration attributes the options of the generic forms #207
  • Support keyed registrations in [Decorate] and [Composite] #209
  • Dispatch by runtime type through a generated IReadOnlyDictionary<Type, Func<TBase>> #210
  • Add unkeyed and generic GetResolvability overloads #215
  • Add a typeof form of [InjectProperty] with open generic support #224
  • Add a typeof form of [ImportService] with open generic support #223
Fixes · 6
  • Resolve IEnumerable<T> of an unregistered element type as an empty sequence #137
  • Capitalise the diagnostic messages that start lowercase #182
  • Dispose a half-warmed scope asynchronously when CreateScopeAsync fails #199
  • Dispose everything the MS.DI bridge builds with its scope and root #201
  • Stop AWT179 for deliberate per-closing [InjectProperty] overrides and report it from the analyzer #226
  • Stop AWT151 for a module that only imports services #228
Performance · 1
  • Give ResolveAsync<T> a typed fast path with cached singleton tasks #211
Jul 21 2026
14 commits4 features1 fix
5 changes
Features · 4
  • Report scan matches whose type is inaccessible (AWT193) #115
  • Let a [Module] self-compile its own [Scan] #117
  • Support lifecycle hooks on [Scan], with generic dispatch #118
  • Support lifecycle hooks on a [Module]'s self-compiled [Scan] #127
Fixes · 1
  • Honor InternalsVisibleTo when checking constructor accessibility #116
Jul 17 2026
2 commits2 features
2 changes
Features · 2
  • Allow lifecycle hooks to take graph-resolved parameters #110
  • Add SuppressDisposal to opt out of container disposal #111
Jul 15 2026
10 commits3 features
3 changes
Features · 3
  • Add ScanAs.MatchingInterface and markerless [Scan] #106
  • Reject Owned<T> over a requesting-type factory (AWT186) #108
  • Report ambiguous and inaccessible MatchingInterface contracts #109
Jul 8 2026
0.4.01 breaking
7 commits1 breaking change2 features
3 changes
Breaking changes · 1
  • Replace [FromServices] with container-side [ImportService<T>] #94
Features · 2
  • Add container-side [InjectProperty<T>] property injection #93
  • Add suppressible boundary analyzers AWT134 and AWT135 #98
Jul 6 2026
0.3.04 breaking
26 commits4 breaking changes13 features2 fixes
19 changes
Breaking changes · 4
  • Rename ScanAs.ImplementedInterfaces to Marker #77
  • Replace Default/TryAdd bool flags with the Fallback enum #84
  • Support non-string service keys (enum, Type) #86
  • Imperative keyed resolution and IKeyedServiceProvider interop #89
Features · 13
  • Warn (AWT156) when a service is IAsyncDisposable but not IDisposable #61
  • Inject keyed registrations as IReadOnlyDictionary<string, TService> #60
  • [Inject(Optional = true)] leaves a property unset when its dependency is unregistered #63
  • Construct [Singleton(Eager = true)] services at container build time #68
  • Inject keyed registrations as awaited Task<IReadOnlyDictionary<string, TService>> #65
  • Pass the requesting type into a factory via [RequestingType] #67
  • Make the MS.DI bridge's async projection reflection-free and native-AOT clean #72
  • Run OnActivated/OnRelease lifecycle hooks around a registration's lifetime (AWT162) #70
  • Diagnose conflicting coalesced lifecycle/eager directives (AWT166) #74
  • Replace logo with the async-first Awaiten mark #75
  • Contextual binding via WhenInjectedInto #76
  • Support open-generic decorators and composites (#79) #85
  • Add name, namespace and exclusion filters to [Scan] #90
Fixes · 2
  • AWT156 per-owner filtering, precise report locations and cross-assembly bail-out #64
  • Dispose partially-built instances when async wiring or init fails #71
Jul 4 2026
28 commits19 features2 fixes1 performance improvement
22 changes
Features · 19
  • Add async initialization via IAsyncInitializable with compile-time taint safety (AWT119/AWT120) #31
  • Add async factory methods as a Task<T> async-init registration channel #34
  • Warn (AWT106) when a factory body hides an IAsyncInitializable/IDisposable capability behind its declared return type #35
  • Async relationship types and async/owned disposal #37
  • Resolve collection dependencies to every registration of a service #39
  • Wrap registered services in decorator chains via [Decorate<TDecorator, TService>] #40
  • Support open generic registration #41
  • Bridge a generated container to Microsoft.Extensions.DependencyInjection #43
  • Front a service's registrations with a single fan-out façade via [Composite<TComposite, TService>] #46
  • Resolve async-initialized collection members through IAsyncEnumerable<T> #44
  • Resolve external dependencies across the MS.DI seam via [FromServices]/[ImportServices] #47
  • Resolve awaited collection dependencies through Task<C> #49
  • Satisfy a differently-closed generic interface request through declared variance #48
  • Fill opt-in [Inject] properties after construction #50
  • Assembly scanning via [Scan] #52
  • Initialize Awaiten containers on host startup via AddAwaitenInitialization #54
  • Add VerifyAgainst startup safety check for external dependencies #55
  • Break mutual constructor cycles with [Inject(Deferred = true)] property injection #51
  • Modules: [Module] / [Import] with overridable defaults #56
Fixes · 2
  • Dispose factory outputs hidden behind a non-disposable return type #33
  • Report AWT102 for a dependency cycle closed only through a bare Owned<T> or Task<T> #38
Performance · 1
  • Data-driven bucket-hash dispatch for by-type resolution #42
Jun 28 2026
18 commits12 features1 fix1 performance improvement
14 changes
Features · 12
  • Add scopes and disposal with thread-safe singletons #12
  • Annotate resolver TryResolve with [NotNullWhen] and cover extensions #13
  • Add lifetime-safety diagnostics (AWT105 captive, AWT106 disposable transient, AWT107 conflicting lifetime) #14
  • Move AWT106 to a DiagnosticAnalyzer so it is suppressible in-source #17
  • Add resolution/build benchmarks vs other DI containers and report them in CI #16
  • Add Func<T> and Lazy<T> relationship types #21
  • Add realistic end-to-end resolution benchmark across DI containers #23
  • Add factory-method and pre-built instance registrations #24
  • Add runtime arguments via [Arg] and Func<TArg…,T> #26
  • Add keyed registration via Key and [FromKey] (AWT116) #28
  • Leak-free disposal — Owned<T>, flow-based AWT117, and strict-by-default LifetimeSafety #29
  • Allow scope-bound resolution of disposable transients under strict lifetime safety #30
Fixes · 1
  • Resolve benchmark marker types and guard report publishing #19
Performance · 1
  • Dispatch resolution through a static Type table instead of a linear if-chain #20
Jun 27 2026
5 commits2 features
2 changes
Features · 2
  • Add MS.DI companion package, generator test harness, and analyzer wiring #7
  • Implement core resolution (Container, Singleton/Transient/Scoped, AWT101/AWT102) #9