DryIoc v4.0.0 Release Notes

Release Date: 2019-03-04 // about 5 years ago
  • 🚀 v4.0.0 Release notes

    Highlights

    • 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 for supported platforms
    • UseInstance is split into RegisterInstance and Use methods #78
    • 📄 The docs now are generated from .cs files in DryIoc.Docs project with up-to-date runnable examples using CsToMd project.

    🔋 Features

    • ➕ 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

    🛠 Fixes

    • 🛠 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