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.0Breaking changesFeaturesFixesPerformance
2026
Version 0
11 releases · Jun 2026 to Nov 2026
229 commits21 breaking changes68 features18 fixes3 performance improvements
Nov 6 2026
14 commits3 breaking changes3 features6 fixes
12 changes
Breaking changes · 3
Features · 3
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
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
AwaitenLifetimeandIExternalResolverHost#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
IServiceProviderIsServicefrom 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
Jul 17 2026
2 commits2 features
Jul 15 2026
10 commits3 features
Jul 8 2026
0.4.01 breaking
7 commits1 breaking change2 features
Jul 6 2026
0.3.04 breaking
26 commits4 breaking changes13 features2 fixes
19 changes
Breaking changes · 4
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
Jul 4 2026
28 commits19 features2 fixes1 performance improvement
22 changes
Features · 19
- Add async initialization via
IAsyncInitializablewith 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
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
TryResolvewith[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>andLazy<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]andFunc<TArg…,T>#26 - Add keyed registration via
Keyand[FromKey](AWT116) #28 - Leak-free disposal —
Owned<T>, flow-based AWT117, and strict-by-defaultLifetimeSafety#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