- fixed: Release 5.4.2 is Broken for Framework 4.8
- fixed: #588 Container.IsDisposed property not reflecting own scope disposed state.
- fixed: #598 How to diagnose Error.WaitForScopedServiceIsCreatedTimeoutExpired?
- fixed: #576 Extension methods not being handled correctly in Made.Of service returning expression
- fixed: #577 False positive validation error when using service setup with certain conditions
- fixed: #578 asResolutionRoot does not affect validation
- added: #572 Add DryIoc targets for NET 6.0, NET 7.0
- added: #571 Add the rule for the injection of C#11 required properties via the rule PropertiesAndFields.RequiredProperties
- added: #544 Add .NET 7 target and up MS dependency version for DryIoc.MS.DI
- added: #565 Add ScopeName.Of to simplify the custom scope name matching logic
- fixed: #116 DryIoc Resolve with decorators goes wrong for parallel execution
- fixed: #547 Blazor File Upload issue with Net 7 and MS DI Package
- fixed: #567 Using DryIoc causes Blazor to crash
- fixed: #559 Possible inconsistent behaviour of resolving collection of services opening resolution scope
- fixed: #560 Fix GetWrappedType implementation(s) to not return null
- fixed: #555 Is there anyway to apply ConcreteTypeDynamicRegistrations to Rules.MicrosoftDependencyInjectionRules
- fixed: #557 Rules.WithFactorySelector(Rules.SelectLastRegisteredFactory()) allows to Resolve the keyed service as non-keyed
- fixed: #554 System.NullReferenceException: Object reference not set to an instance of an object.
-fixed: #546 Generic type constraint resolution doesn't see arrays as IEnumerable<>
-fixed: #536 DryIoc Exception in a Constructor of a Dependency does tunnel through Resolve call
-fixed: #519 Exception thrown when using WebOptimizer in ASP.NET Core MVC
-fixed: #516 Singleton Decorator to Scoped base shouldn't work, but does
- Adding
WithConcreteTypeDynamicRegistrations
overload withIfUnresolved ifConcreteTypeIsUnresolved
parameter to control exception information, and rule fallback behavior (#506) - Small speed-ups
- #507 Transient resolve with opening scope using factory func in singleton
- fixed: #180 Azure Function DI issue - Anonymously Hosted DynamicMethods Assembly. Object reference not set. (Nullable int optional argument with default int value is set to null)
- fixed: #475 Exception message for WaitForScopedServiceIsCreatedTimeoutExpired misses the tick number output
- fixed: #470 Regression in 5.0.0 when resolving
Func<IEnumerable<IService>>
with Parameter - fixed: #471 Regression in 5.0 when using
Rules.SelectKeyedOverDefaultFactory
- fixed: #472 Func with 4 and more arguments is broken in the Interpreter
Main achievements:
- Performance speed-up and the less memory allocations (check README for the benchmarks)
- More consistent and full API (highlight is on the RegisterDelegate overloads)
Main breaking changes:
- Removing PCL and .NET 3.5, .NET 4.0 and .NET Standard 1.0 - 1.3 targets
- Moving ImTools and FastExpressionCompiler sources to the
DryIoc.ImTools
andDryIoc.FastExpressionCompiler
namespaces - Removing
UseInstance
in favour ofUse
andRegisterInstance
methods
Main "until the next version":
- Improving compile-time capabilities from the current T4 bound solution
- fixed: #460 Getting instance from parent scope even if replaced by Use
- fixed: #435 hangfire use dryioc report ContainerIsDisposed
- fixed: #449 Optional dependency shouldn't treat its own dependencies as optional
- fixed: #451 Compiler-generated type as a service
- fixed: #456 One more regression
- fixed: #446 Resolving a record without registration causes a StackOverflowException
- fixed: NY bug of RegisterInstance of null string
- fixed: #434 ReturnDefaultIfNotRegistered is not respected between scopes
- fixed: #435 hangfire use dryioc report ContainerIsDisposed
- fixed: #418 Resolving interfaces with covariant type parameter fails when using RegisterMapping
- fixed: #432 Resolving interfaces with contravariant type parameter fails with RegisteringImplementationNotAssignableToServiceType error
- fixed: #429 Memory leak on MS DI with Disposable Transient
- fixed: #412 ResolveMany not work with generics after any Unregister
- added: #406 Allow the registration of the partially closed implementation type
- fixed: #405 DryIoc has waited for the creation of the scoped ... with service name/type
- fixed: #399 Func dependency on Singleton resolved under scope breaks after disposing scope when WithFuncAndLazyWithoutRegistration()
- fixed: #391 Deadlock during Resolve
- fixed: #394 For_Func_returned_type_with_lazy_dependency_Func_parameters_are_correctly_passed
- #390 NullReferenceException on Unregister
- fixed the potential issue with the switching back from the SelectLastFactoryRule to the default rule
- #376 DryIoc.Interpreter seems to mess up the exception call stack
- #378 Inconsistent resolution failure
- #367 Resolve with FactoryMethod of instance throws DryIoc.ContainerException
- #365 Really fixing: Made.Of() Parameters incorrectly reused depending on Register() usage
- #365 Made.Of() Parameters incorrectly reused depending on Register() usage
- #338 Child container disposes parent container singletons
- #355 Auto mocking feature for unit testing
- #356 Surface the FindFactoryWithTheMinReuseLifespan so it can be used together with the FactorySelector
- #357 Avoid overload ambiguity for the ScopedTo(Type) by adding the separate ScopedToService
- #358 Add and surface the Scope.Clone(withDisposables=false) to enable more ChildContainer scenarios
- #359 DynamicRegistrationsAsFallback being unnecessary called multiple times
- #360 Mark DynamicRegistrationProvider with the FactoryType (Service, Decorator or combination) to avoid unnecessary provider call and factory creation
- #363 Add CreateChild method as the basis for CreateFacade and such
- #216 Add Rules.WithThrowIfScopedOrSingletonHasTransientDependency
- #343 Scope validation for Transient does not work as expected
- #344 Scope is disposed before parent when using facade (added Scopes and Singleton cloning into CreateFacade)
- #348 Create a child container without WithNoMoreRegistrationAllowed flag (surfacing IsRegistryChangePermitted in With method)
- #350 Wrong scoped resolve (together with MS DI rules)
- #352 Consider resolving the variance compatible open-generic the same as for collection of open-generics (added Rules.WithVarianceGenericTypesInResolve)
- fixed: #347 The AsResolutionCall option and/or WithFuncAndLazyWithoutRegistration rule are not respected
- fixed: #332 Delegate returning null throws exception RegisteredDelegateResultIsNotOfServiceType
- fixed: #340 WaitForItemIsSet waits forever in v4.5.0 for the case like that
Singleton(Func<Singlton> f)
- added: #203 [Perf] Avoid locking of service creation in scope if possible
- added: #13 Make New() method available on IResolver/IResolverContext interface
- added: #328 Why is there no WithVariantGenericTypesInResolvedCollection?
- added: #329 Add RegisterInitializer with the IReuse parameter overload to allow separate initializer lifetime
- added: #331 [MS.DI] Add the Rules.WithServiceProviderGetServiceShouldThrowIfUnresolved
- fixed: #315 Combining
RegisterDelegate
withTrackingDisposableTransients
rule throwsTargetParameterCountException
- fixed: #316 ResolverContext.TrackDisposable explicit helper is always tracking the service in Singleton scope bug
- fixed: #314 Expose the usual IfAlreadyRegistered option parameter for RegisterMapping
- fixed: #239 [DOCS] WithUknownServiceResolver ignores ResolveMany
- fixed: #310 Ensure that FEC.LightExpression.ILGeneratorHacks does not crash if some method is not reflected
- fixed: #303 Open Generic Singleton do not provide same instance for Resolve and ResolveMany
- fixed: #301 breakage in scoped enumeration in v4
- added: #298 Add RegisterManyIgnoreNoServicesWereRegistered
- fixed: #295 useParentReuse does not respects parent reuse
- fixed: #294 in parameter modifier breaks service resolution
- fixed: #290 ScopedTo to Singleton does not work
- fixed: #289 Think how to make Use to directly replace scoped service without special asResolutionCall setup
- fixed: #288 Recursive resolution ignores current scope .Use() instance
- small perf improvements
- fixed: #156 Xamarin Forms iOS System.PlatformNotSupportedException: Operation is not supported on this platform.
- fixed: #283 Open-generic decorators are no applied to the service registered via RegisterInstance
-
feature: #270 Add FEC.LightExpression.LambdaExpression wrapper to work the same as System LambdaExpression
-
fixed: #258 System Invalid program exception when removing dependency
-
fixed: #265 Improve the case with splitting the big object graph
-
fixed: #267 [MS.DI] Incorrect resolving for generic types.
-
fixed: #256 Memory usage increase up to 7 percent in real-case benchmark
-
fixed: #254 ResolveMany if singleton decorators decorates the first item only
-
fixed: #280 Possibility to make source files which are embedded to the project internal?
- #242 Validate call hangs when there are many singletons
- #245 Validate may not create the actual expressions to be more performant
- #250 Original stack trace is lost at Interpreter.TryInterpretAndUnwrapContainerException
- #248 WithConcreteTypeDynamicRegistrations condition gets called with serviceKey always null
- #236 Additional default parameter for Made creation public API introduced binary incompatibility
- #118 Validate issue
- #215 RegisterInitializer causes additional call(s) to TService.Dispose when container is disposed
- #220 Fix INavigationService resolution in Prizm extensions
- #227 Optimize IsRegistered
- #228 Updated DryIoc from 4.0.4.0 to 4.1.0 in Unity Engine project, keyed register/resolve wont work anymore
- #230 Add the error code into the ContainerException message to simplify error finding
- Better memory use and massively improved performance for the real-world applications - big object graphs and the unit-of-work scenarios. See the updated benchmark results in [readme.md].(https://github.com/dadhi/DryIoc/blob/master/README.md#creating-the-container-registering-the-services-then-opening-a-scope-and-resolving-the-scoped-service-eg-controller-for-the-first-time))
- Improve parallelism / reduce thread blocking #137
- Full and fast DryIoc own Interpretation support via
Rules.WithUseInterpretation()
- useful for iOS and other platforms without compilation support #90 - Add DryIocZero capabilities to the DryIoc source package #101
- Copied DryIoc sample project from the MediatR but with DryIoc.Messages #117
- Interpretation only option #90
- Add RegisterDelegate with the list of dependencies to Inject and not to Resolve #147
- Lift restrictions for Scope disposal when using ambient ScopeContext #168
- FactoryDelegate wrapper support #191
- Add Rules.UseDecorateeReuseForDecorators #201
- Resolving a component for the second time throws #130
- Stackoverflow exception #139
- Xamarin Forms iOS: Operation is not supported on this platform. #156
- DryIoc 4.0.5 withoutFastExpressionCompiler deadlock issue #157
- Rules.WithDependencyDepthToSplitObjectGraph is not propagated through most of
Rules.With
methods #163 - Rules.WithDependencyDepthToSplitObjectGraph was not applied in some cases with Decorators in graph #164
- Made.Of() Parameters don't follow Reuse setting #179
- ThreadScopeContext not working in DryIoc.dll 4.1.0-preview-02? #183
- ReflectionTools methods unexpectedly return static constructors #184
- Container creates multiple instances if TryInterpret fails #188
- Open-generic implementation may be wrongly considered for service with many type args #190
- DryIOC new Transient Disposable #192
- Private and public Constructors in generic classes #196
- Fix documentation regarding implicitly injected scope as IDisposable #197
- Open generics resolve fails if there is a static constructor #198
- 4.1.0 Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. #205
- Avoid wasteful compilation of the same cached expression by multiple threads #208
- fixed: #173 Validate-Method throws System.TypeInitializationException : The type initializer for 'DryIoc.OpenGenericTypeKey' threw an exception.
- fixed: Wrong IContainer resolved #171
- fixed: #133 Validate method call hangs
- fixed: #134 with finding is th property is static in VB
- fixed: #116: DryIoc Resolve with decorators goes wrong for parallel execution
- fixed: #119: v4.0.3 packages were targeting only .NET 4.5 and .NET Standard 2.0
- fixed: #120: V4.0.3 double dryioc break the build
- fixed: #121: FastExpressionCompiler.cs and Expression.cs code comment out in .NetFramework 4.7
- fixed: #124: Stackoverflow exception 4.0.3
- fixed: #109: Cannot inject a struct using a Func wrapper
- fixed: #114: Resolve Action{T}
- fixed: #100: ResolveMany with Meta does NOT work but collection with Meta does work
- added: #95: Serializable ContainerException for supported targets
- fixed: #97: Resolving last registration from multiple default services bug
- fixed: #89: DryIoC.CommonServiceLocator.dll package out-of-date link
- DryIoc.dll and all extensions are strongly-signed.
- Greatly improved performance and decreased memory allocations for bootstrapping and first-time resolution, as well as for the rest of operations. The results were measured on realistic mid-sized object graph with ~40 dependencies and mixed registration types.
IResolver
is directly implementing (IServiceProvider
)[https://docs.microsoft.com/en-us/dotnet/api/system.iserviceprovider?view=netframework-4.7.2] for supported platformsUseInstance
is split intoRegisterInstance
andUse
methods #78- The docs now are generated from
.cs
files in DryIoc.Docs project with up-to-date runnable examples using CsToMd project.
- added: #4 Rule for Func and Lazy to be resolved even without requested service registered
- added: #8 Parity of registration methods between IContainer and IRegistrator (RegisterMapping and RegisterPlaceholder are available in IRegistrator)
- added: #9 RegisterMany should indicate if no registration was made
- added: #11 Resolution root bound dependency expression de-duplication
- added: #17 Rules.DefaultRegistrationServiceKey enhancement
- added: #20 Enhance error message with current container Rules info
- added: #32 Integrate MediatR like middleware directly to DryIoc #32
- added: #39 For troubleshooting purposes add ability to opt-out FastExpressionCompiler
- Added: #45 Consider expression interpretation to speed-up first time resolution
- added: #78 Split UseInstance two roles into separate RegisterInstance and Use
- added: DryIoc IResolver now directly implements IServiceProvider - no need for BuildServiceProvider anymore
- added: DryIoc.Rules.Rules.MicrosoftDependencyInjectionRules - the set of rules for MS.DI available directly in DryIoc
- added: FactoryInfo.Of(MemberInfo factoryMember, object factoryInstance)
- added: Explicit Factory.RegistrationOrder and adapted its usage for open-generics
- added: IRegistrator.GetRegisteredFactories
- added: FactoryType to Registrator.RegisterMapping
- added: AsyncExecutionFlowScopeContext.Default member
- added: Support for FEC v2.0
- fixed: #6 Open generic singleton service registration that satisfies multiple interfaces
- fixed: #7 Context-based injection
- fixed: #16 AutoConcreteTypeResolution should not consider a primitive type
- fixed: #25 Decorator with serviceKey throws exception which gives invalid advice on how to fix the issue for the most common reason to use the servicekey
- fixed: #26 Speed Optimization for short living applications
- fixed: #27 DryIoc cold start performance
- fixed: #28 FastExpressionCompiler is not used in Net Standard 1.3, 2.0 packages and not used in .Net Core
- fixed: #29 Resolve caches object[] args values
- fixed: #33 Memory leak with ResolveManyBehavior.AzLazyEnumerable?
- fixed: #41 ErrorCode: RegisteredFactoryMethodResultTypesIsNotAssignableToImplementationType
- fixed: #46 Operation is not supported on this platform exception on Xamarin iOS
- fixed: #61 Rules.SelectLastRegisteredFactory() does not account for OpenGenerics
- fixed: #63 Func wrapper resolving #63
- fixed: #75 Scoped call to Resolve() with args seems to leak memory
- fixed: BB-593 Add auto-generated tag to PCL FEC
- fixed: BB-594 Conflicting type is not working in .NET Core 2.1
- fixed: BB-596 The problem was in non-public service type- fixed: RegisterMapping for open-generic service type
- fixed: Using facadeKey in CreateFacade
- fixed: #544: WithTrackingDisposableTransients may downgrade Singletons to Transients
- fixed: #533: Exporting WPF UserControl causes NullReferenceException
- fixed: Race condition when creating or storing the scoped service
- fixed: #527 Error ResolveMany after Unregister
- fixed: Bug in ImTools ArrayTools.Append in certain cases
- fixed: #519 Dependency of singleton not working when using "child" container
- fixed: #520 AccessViolationException on some machines
- fixed: #521 Rule ConcreteTypeDynamicRegistrations: Exception while resolving instance of class with constructor-injected generic instance of not registered class
- fixed: #512 InResolutionScopeOf in combination with SelectLastRegisteredFactory
- changed: Updated to FEC v1.4 - now all DryIoc expressions are covered by FEC. This means perf improvements for asResolutionCall injection
- added: #499: Add RegisterPlaceholder to enable delayed registration
- added: Setup.DecoratorOf{T}(key) and runtime version to simplify specifying condition for matching decoratee type and key
- added: Missing overload for Made.Of to consider request -> instance factory info.
- added: Rules.WithDynamicRegistrationsAsFallback
- changed: Updated FEC to v1.3.0
- fixed: #492: Lazy imports disguised as non-lazy
- fixed: #497: ConstructorWithResolvableArguments is not working properly
- fixed: #500: Rule WithConcreteTypeDynamicRegistrations disables allowDisposableTransient
- fixed: #506: Cannot resolve string[]
- fixed: #507: Resolved collection of mixed open and closed generics does not preserve order of registration
- fixed: #508: SelectLastRegisteredFactory and resolving collection of open-generic is not working as intended
- fixed: #495: InvalidCastException on type resolution
- fixed (!!!): #493 Some resolving of the controller ends up with exception "Container is disposed..."
- fixed: #175 Deterministic implicit rule to select from multiple services for specific scope
- fixed: #488 DryIoc.ContainerException if using WithDependencies
- fixed: Backward compatibility of DryIoc 2.11 WrapperSetup.Condition with 2.10
- fixed: Backward compatibility of DryIoc 2.11 Setup.Condition with 2.10
- fixed: #480: DryIoc.Microsoft.DependencyInjection - WithDependencyInjectionAdapter() exception
- fixed: UseInstance is not backward compatible with v2.10
- fixed: #478: DryIoc.Owin.dll 2.2.0 not compatible with DryIoc.dll 2.11.0
- added: #449: Provide a way to log unresolved dependencies via Rules.WithUnknownServiceHandler
- added: #463: Add IfAlreadyRegistered option for UseInstance
- added: #475: Dynamic Registration Providers to enable lazy and on-demand registrations
- added: #476: AutoFallback and AutoConcreteType resolution based on Dynamic Registration providers
- fixed: #396: Enable ResolveMany to use auto fallback resolution via dynamic registrations
- fixed: #451: DryIoc should know about static members
- fixed: #474: Exclude supported collection wrapper interfaces from RegisterMany / ExportMany
- fixed: #477: ArgumentException while resolving
- fixed: DryIocAttributes dependency to System.Diagnostics.Tools from ..Debug
- fixed: #465 Installing DryIoc.dll for desktop/4.5 installs tons of .NEt Standard packages
- changed: Attempt to fix InvalidCastException found in scope of #433
- added: Xamarin.Forms for MacOS support, based on PCL Profile259/netstandard1.0 using xamarinmac2.0 TFM
- added: Reuse.ScopedOrSingleton to simplify scenarios which currently use Rules.WithImplicitRootOpenScope, and simplify MS.DI adapter
- fixed: Performance issue with #459 (Container.Dispose stack trace) and made it turned Off by default
- fixed: Updated to FEC v1.0.0+ with fix for #6
- changed: More cache agnostic and flexible disposable transient tracking with Reuse.ScopedOrSingleton
- changed: Improved perf around resolution of scoped service
- fixed: #459: Add Container.Dispose stack trace to ContainerIsDisposed error message
- changed: Updated to FastExpressionCompiler v1.0.0
- fixed: #456: Abstract service type is not supported with AutoConcreteTypeResolution and required service type
- fixed: #431: Make AutoConcreteTypeResolution rule to check if type is resolvable and fallback to next rule
- added: FactoryMethod.DefaultConstructor
- fixed: #438: Remove self WeakReference from Container to make it more simple
- changed: Using the latest FastExpressionCompiler with nested lambda compilation support
- removed: AggressiveInlining
- fixed: #454: Performance degradation for resolution of InWebRequest and generally named scope services
- fixed: #446 Select single open generic impl based on matching closed service type
- fixed: #440: Singleton optimazation causes exception for internal type in some cases
- fixed: #435: Reuse.Singleton prevents the correct container injection within explicit resolve
- fixed: #437: General perf degradation introduced in 2.9 due skipping fast FactoryCompiler
- added: #430: Add rule to change or to disable split level of large object graph
- changed: Moving HashTrees to ImTools namespace.
- changed: #254 [Performance] Remove state parameter from FactoryDelegate - use FastExpressionCompiler with closure support
- fixed: #426: dead lock
- fixed: #423: Inner scope is injected to singleton
- fixed: #429: Resolve instance from named scope with Func
- fixed: #421: MissingMethodException
- fixed: Perf of first Resolve in some cases - now is up to ~10x faster
- fixed: #416 (now for real): Adding always true condition to decorator changes the decorated outcome - but should not
- fixed: #417 Performance issue with Func of singleton
- fixed: #418 Performance issue with resolving singletons
- fixed: #419 In some cases ResolveMany unable to resolve Decorator with dependency due issue with required service type
- fixed: #420: Singleton resolved and created via Func with arguments then may be resolved directly
- fixed: GetMembers did not considered base of the base class
- fixed: #416: Adding always true condition to decorator changes the decorated outcome - but should not
- fixed: #415: Decorators useDecorateeReuse should permit decorating disposable transient
- fixed: #409: Resolution scope is created with the service type instead of actual required service type
- fixed: #410: ResolveMany is treated differently comparing to Resolve IEnumerable
- fixed: #404: ConstructorWithResolvableArguments does not take into account parameter service key
- added: #386: Support for resolving void Factory Method as Action
- added: Support for array decorators
- added: #405: Support for resolving unknown services in ResolveMany via UnknownManyServiceResolvers
- fixed: #387: ArgumentException with initializer
- fixed: #382: Different instances of interface with Reuse.InCurrentNamedScope
- fixed: #383: Support open-generic type to specify Reuse.InResolutionScopeOf(open-generic)
- added: DryIoc.Internal source code package with the public types made internal.
- fixed: NetStandard1.0 package dependencies
- fixed: Removing remains of IServiceProvider
- fixed: NetStandard1.0 package dependencies
- removed: #342: Make IContainer implement System.IServiceProvider interface
- fixed: #368 Registration Made.Of should override the global Container Made.Of settings
- added: #269: Distinguish Transient reuse from non specified reuse
- added: #331: Track transient disposables in singleton scope if nor reused parent nor the current scope available
- added: #342: Make IContainer implement System.IServiceProvider interface
- fixed: #327: UseInstance non-deterministic behavior in multi-threading tests
- fixed: #328: Lazy collection resolve behavior in and out of scope
- fixed: #330: Looks like rules do not work with TrackingDisposableTransients
- fixed: #338: after re-register instance in scope used old version of object(cached)
- fixed: #347: Not resolved instance in child scope of scope
- fixed: #344: Transient disposable validation
- fixed: #356: Portable.GetAssemblyTypesMethod() crash with ArgumentException
- fixed: #359: Some rules and setup flags applied twice will wrongly unset the flag
- fixed: #365: Container is not marked and treated as Disposed when Singletons are disposed
- fixed: #334 [DryIoc.Microsoft.DependencyInjection] MissingMethodException in WithDependencyInjectionAdapter
- fixed: #335 Decorator of IEnumerable wrapper taking nested in IEnumerable dependency fails with StackOverflow
- added: #195: Composable Metadata as a IDictionary<string, object>
- added: #232: Change RegisterInstance defaults to IfUnresolved.Replace and to Reuse.InCurrentScope
- added: #304: Add option to pass values for some dependencies on Resolve
- added: #313: Support non public constructors with ConstructorWithResolvableArguments
- added: #314: Allow to inject non primitive external values
- added: #315: Support decorator of wrappers, e.g. decorate IEnumerable<T>
- fixed: #298: AspNetCore.DependencyInjection exceptions when verifying resolutions
- fixed: #300: Exception when reusing objects.
- fixed: #310: Problems with Decorators and Service Keys
- fixed: #317: Skip Enums in RegisterMany(assemblies)
- fixed: #301: Issue with Lazy in Func with arguments
- fixed: #299 Race condition between multiple containers
- fixed: #290 Disposable Transient without reused parent should be tracked in nearest open scope
- changed: increasing version for fixing NetStandard1.0 support in dll package
- changed: increasing version for adding NetStandard1.0 support in dll package
- fixed: #247: Collection wrapper resolved from Facade does not count parent container registrations
- fixed: #280: LazyEnumerable dependency silences missing dependency error - but works (throws) for fixed array
- fixed: #279: IfUnresolved.ReturnDefault propagates down the dependency chain
- fixed: #285: Recursive dependency in the case of using Composite Pattern
- fixed: #219: Minimize memory allocations in Request and RequestInfo
- added: #282: Enable to resolve func with more than 4 parameters (up to 7)
- added: #255: Make GetCurrentScope available on IContainer via extension method
- added: #172: Reuse passed Func argument in nested dependencies, but not in the same service
- added: #257: Support for contentFiles to enable source packages in NuGet3.3
- added: Uap (Universal Windows Platform) content source code DryIoc package
- fixed: #277 Custom value for dependency evaluated to null is interpreted as no custom value and tries to resolve the dependency
- fixed: #278 Arg.Of does not recognize service key of non-primitive type
- fixed: #274: Lazy resolution of dependency registered with Reuse.InResolutionScope breaks subsequent resolutions without wrappers
- fixed: #267: False alarm about recursive dependency when using decorator
- added: #263: Add IfAlreadyRegistered.AppendNewImplementation option for better collection handling
- fixed: #264: IfAlreadyRegistered.Replace can span multiple registrations
- fixed: #262: Using attributes to inject primitive variables
- fixed: #261: Make Disposal work in reverse resolution order
- fixed: #260: Cannot interpret GetOrCreateResolutionScope expression on iOS
- fixed: #258: Setup.AllowDisposableTransient is overridden by container.WithTrackingDisposableTransient
- changed: In source code DryIoc package split immutable data structures and tool to separate ImTools.cs
- removed: CloseCurrentScope from Container as it was added recently but not used anywhere.
- added: method New overload with strongly type Made.Of
- fixed: #251: Auto register types from different namespace and different assemblies
- fixed: #252: Make work together MefAttributedModel constructor selection and ConstructorWithResolvableArguments rule
- fixed: #253 Add Container.ToString method to at least indicate scope for scoped container
- fixed: #245: Automatically add condition to check T constraints in Decorator of T
- fixed: #250: DI.Mef: Non static class of static factory method is exported and can be resolved
- changed: Minor Resolve speedup
- added: #141: Support Decorators with open-generic factory methods of T
- added: #206: Track IDisposable Transients in scoped consumer's Scope
- added: #215: Option to specify Release action for reused services to implement pooling etc
- added: #227: Missing Arg.Of overload to specify default value for unresolved dependency
- added: #228: Make IContainer implicitly available for injection without need for registration
- added: #229: Container rule to use Singleton scope as implicitly Open current scope for scoped registrations
- added: #239: Decorator setting to use Decoratee Reuse
- added: #241: Registration option to useParentReuse for dependency
- added: #242: Container rule for automatic concrete types resolution
- fixed: #94: Support for creating concrete type without storing it in Container
- fixed: #220: Minimize locking and therefore chances for deadlock in Singleton Scope
- fixed: #230: Custom initializer attached to lazily resolved dependency is called once per resolution, not once per construction
- fixed: #240: ConstructorWithAllResolvableArguments ignores implicitly injected dependencies and custom values
- fixed: #224: Enumerable wrapped in Func loses the information about Func wrapper, causing incorrect scope lifetime validation
- fixed: #222: Resolving as IEnumerable silence the dependency resolution errors and just skips the unresolved item
- fixed: #218: Apply decorators registered for service type when resolving with required service type
- fixed: #213: Lazy Singletons should be resolved after container is disposed
- fixed: #212: ResolveMany of object with generic required service type is failing with ArgumentException
- added: #205: Add customizable IfAlreadyRegistered default value per container
- added: #204: Add ResolveMany of objects wout need to specify ResolveMany{Object}
- fixed: #203: RegisterMany should exclude ValueType and general purpose service types IEquatable, IComparable
- Small performance improvements
- fixed: #201: Mutithreading issue when RegisterInstance() is used within OpenScope()
- fixed: #200: Multiple instances for Singleton created when Container is shared among multiple threads
This release pushes DryIoc towards the mature full-featured library with:
- Support for PCL and .NET Core.
- Documentation.
- More complete and consistent API surface.
- Bug fixes.
- Diagnostics for potential resolution problems with
container.VerifyResolutions()
. - Improved registration and first resolution time.
- Support of really large object graphs.
- Possibility of compile-time factory delegate generation (utilized by DryIocZero).
- Ambient current scope and
Reuse.InWebRequest
for ASP.NET integration. - Reuse per service in resolution graph via
Reuse.InResolutionScopeOf()
. - Support for static and instance factory methods in addition to constructor, including support for method parameters injection.
- Powerful open-generics support including variance, constraints, open-generic factory methods in open-generic classes.
- Batch registration from assemblies and type collections via
RegisterMany
. - Support for service key of arbitrary type. The only requirement for key type is to implement
object.GetHashCode
andobject.Equals
. - Resolve as
KeyValuePair
to get service key with service object. - Register with condition for resolution.
- Required service type support: e.g.
var serviceObjects = c.Resolve<object[]>(typeof(Service));
. - Optional parameters support.
- Fine-grained control over injection of parameters, properties, and fields.
- Injection of primitive values.
- Control how reused service is stored and disposed via
weaklyReferenced
andpreventDisposal
setups. - Resolve service collection as
IList<T>
,ICollection<T>
,IReadOnlyList<T>
,IReadOnlyCollection<T>
. - Register once, existing registration update, unregister.
- removed: Compilation to DynamicAssembly. DryIoc is fast enough without its complexity.
- fixed: #70: .Net 4.0 related: Unable to resolve types from unsigned assembly if compiling to dynamic assembly is turned On (it is by default)
- fixed: #56: ResolvePropertyAndFields/SatisfyImports for already created instance with regard of ResolutionRules, e.g. provided by MefAttributedModel
- fixed: #46: Reuse.InCurrentScope for nested dependencies is not working
- fixed: #5: Friend assembly reference 'DryIoC.CompiledFactoryProvider.DynamicAssembly' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations.
- fixed: #4: DryIoC\InternalsVisibleToFactoryCompilerDynamic.cs.
- fixed: #37: Support symbol packages for SymbolSource.org.
- fixed: #38: Add optional script to Sign NuGet package assemblies with Strong Name
- fixed: #29: DryIoc.dll v1.2.1 Nuget package contains wrong DLL from dev branch
- fixed: #26: Singleton creation from new scope fails
- fixed: #1: Reordering and nesting of type arguments in generics is not supported
- DryIoc first public appearance.