From 91322a4fe91a778f2a5278138bffad40a8e8b409 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Sun, 8 Apr 2018 11:21:21 -0600 Subject: [PATCH 01/17] upping version to 6.3.4 Nightly --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index f1919ef9..6afe726d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,6 @@ environment: - build_version: 6.3.3 - Version: $(build_version) + build_version: 6.3.4 + Version: $(build_version)-Nightly%APPVEYOR_BUILD_NUMBER% COVERALLS_REPO_TOKEN: secure: +OWHMxYHaMp6iRNNLZcMZq423PhYWxMky+B2C0p3U8v7tpdoKRMzWZKJ1LuYO60O version: $(build_version)-{build} From 05d26e81723eb464af643d0e5f8f11c89369b5b3 Mon Sep 17 00:00:00 2001 From: Ian Johnson Date: Sun, 8 Apr 2018 11:31:36 -0600 Subject: [PATCH 02/17] adding ubuntu --- appveyor.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 6afe726d..a1082b55 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -27,4 +27,6 @@ test_script: artifacts: - path: Grace*.nupkg name: Grace -os: Visual Studio 2017 +image: +- Visual Studio 2017 +- Ubuntu From 82e25b8a9b4ac41188494dc329d361fe8127fe15 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Sat, 21 Apr 2018 06:22:10 -0600 Subject: [PATCH 03/17] removing ubuntu build because grace builds against .net --- appveyor.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index a1082b55..632372a3 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,4 +29,3 @@ artifacts: name: Grace image: - Visual Studio 2017 -- Ubuntu From 6e0d2961175cf24cc67a29e081f9138dae5150bb Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Sun, 22 Apr 2018 06:01:38 -0600 Subject: [PATCH 04/17] fixing circukar refernce problem issue #156 --- .../ActivationExpressionBuilder.cs | 8 ++- .../ConstructorExpressionCreator.cs | 2 +- .../DynamicConstructorExpressionCreator.cs | 6 +- .../Impl/Expressions/ExpressionUtilities.cs | 7 ++- .../Expressions/WrapperExpressionCreator.cs | 3 +- .../DelegateBaseExportStrategy.cs | 2 +- .../TimedConstructorSelectionMethod.cs | 2 +- .../Misc/CompositePatternTests.cs | 62 +++++++++++++++++++ 8 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs diff --git a/src/Grace/DependencyInjection/Impl/Expressions/ActivationExpressionBuilder.cs b/src/Grace/DependencyInjection/Impl/Expressions/ActivationExpressionBuilder.cs index efaf5d2a..816573d1 100644 --- a/src/Grace/DependencyInjection/Impl/Expressions/ActivationExpressionBuilder.cs +++ b/src/Grace/DependencyInjection/Impl/Expressions/ActivationExpressionBuilder.cs @@ -576,7 +576,8 @@ protected virtual IActivationExpressionResult GetExpressionFromStrategyCollectio { var strategy = request.Filter == null ? collection.GetPrimary() : null; - if (strategy != null) + if (strategy != null && + strategy != request.RequestingStrategy) { var result = ActivationExpressionForStrategy(scope, request, strategy); @@ -622,6 +623,11 @@ protected virtual IActivationExpressionResult SelectStrategyFromCollection(IActi } } + if (request.RequestingStrategy == strategy) + { + continue; + } + result = strategy.GetActivationExpression(scope, request); if (result != null) diff --git a/src/Grace/DependencyInjection/Impl/Expressions/ConstructorExpressionCreator.cs b/src/Grace/DependencyInjection/Impl/Expressions/ConstructorExpressionCreator.cs index 6d2fa15f..6ca6080b 100644 --- a/src/Grace/DependencyInjection/Impl/Expressions/ConstructorExpressionCreator.cs +++ b/src/Grace/DependencyInjection/Impl/Expressions/ConstructorExpressionCreator.cs @@ -208,7 +208,7 @@ protected IActivationExpressionResult CallExportFunc(IActivationStrategy strateg var newRequest = request.NewRequest(parameter.ParameterType, strategy, strategy.ActivationType, RequestType.ConstructorParameter, parameter, false, true); - return ExpressionUtilities.CreateExpressionForDelegate(exportDelegate, ShouldTrackDisposable(configurationExternallyOwned, injectionScope, strategy), injectionScope, newRequest); + return ExpressionUtilities.CreateExpressionForDelegate(exportDelegate, ShouldTrackDisposable(configurationExternallyOwned, injectionScope, strategy), injectionScope, newRequest, strategy); } /// diff --git a/src/Grace/DependencyInjection/Impl/Expressions/DynamicConstructorExpressionCreator.cs b/src/Grace/DependencyInjection/Impl/Expressions/DynamicConstructorExpressionCreator.cs index 06e2c4f2..5da7ee9e 100644 --- a/src/Grace/DependencyInjection/Impl/Expressions/DynamicConstructorExpressionCreator.cs +++ b/src/Grace/DependencyInjection/Impl/Expressions/DynamicConstructorExpressionCreator.cs @@ -47,7 +47,7 @@ public override IActivationExpressionResult CreateExpression(IInjectionScope sco protected virtual IActivationExpressionResult CreateCallExpression(IInjectionScope scope, IActivationExpressionRequest request, TypeActivationConfiguration activationConfiguration, ActivationStrategyDelegate activationDelegate) { return ExpressionUtilities.CreateExpressionForDelegate(activationDelegate, activationConfiguration.ExternallyOwned, - scope, request); + scope, request, activationConfiguration.ActivationStrategy); } /// @@ -220,7 +220,7 @@ private Expression CreateLocateExpression(ParameterInfo parameter, IInjectionSco var delegateValue = (Delegate)parameterInfo.ExportFunc; var expressionCall = ExpressionUtilities.CreateExpressionForDelegate(delegateValue, - activationConfiguration.ExternallyOwned, scope, newRequest); + activationConfiguration.ExternallyOwned, scope, newRequest, activationConfiguration.ActivationStrategy); var standardParameters = delegateValue.GetMethodInfo() .GetParameters() @@ -255,7 +255,7 @@ private Expression CreateLocateExpression(ParameterInfo parameter, IInjectionSco var compiledDelegate = request.Services.Compiler.CompileDelegate(scope, expressionCall); expressionCall = - ExpressionUtilities.CreateExpressionForDelegate(compiledDelegate, false, scope, newRequest); + ExpressionUtilities.CreateExpressionForDelegate(compiledDelegate, false, scope, newRequest, activationConfiguration.ActivationStrategy); return expressionCall.Expression; } diff --git a/src/Grace/DependencyInjection/Impl/Expressions/ExpressionUtilities.cs b/src/Grace/DependencyInjection/Impl/Expressions/ExpressionUtilities.cs index 9b644cca..0fa114f0 100644 --- a/src/Grace/DependencyInjection/Impl/Expressions/ExpressionUtilities.cs +++ b/src/Grace/DependencyInjection/Impl/Expressions/ExpressionUtilities.cs @@ -49,9 +49,10 @@ public static IActivationExpressionResult[] CreateExpressionsForTypes(IActivatio /// /// /// + /// /// public static IActivationExpressionResult CreateExpressionForDelegate(Delegate delegateInstance, bool allowDisposableTracking, IInjectionScope scope, - IActivationExpressionRequest request) + IActivationExpressionRequest request, IActivationStrategy requestingStrategy) { var methodInfo = delegateInstance.GetMethodInfo(); @@ -61,7 +62,7 @@ public static IActivationExpressionResult CreateExpressionForDelegate(Delegate d // Handle closure based delegates differently if (delegateInstance.Target != null && delegateInstance.Target.GetType().FullName == _closureName) { - resultsExpressions = CreateExpressionsForTypes(request.RequestingStrategy, scope, request, methodInfo.ReturnType, + resultsExpressions = CreateExpressionsForTypes(requestingStrategy, scope, request, methodInfo.ReturnType, methodInfo.GetParameters(). Where(p => !(p.Position == 0 && p.ParameterType.FullName == "System.Runtime.CompilerServices.Closure")). Select(p => p.ParameterType).ToArray()); @@ -72,7 +73,7 @@ public static IActivationExpressionResult CreateExpressionForDelegate(Delegate d } else { - resultsExpressions = CreateExpressionsForTypes(request.RequestingStrategy, scope, request, methodInfo.ReturnType, + resultsExpressions = CreateExpressionsForTypes(requestingStrategy, scope, request, methodInfo.ReturnType, methodInfo.GetParameters().Select(p => p.ParameterType).ToArray()); expression = methodInfo.IsStatic diff --git a/src/Grace/DependencyInjection/Impl/Expressions/WrapperExpressionCreator.cs b/src/Grace/DependencyInjection/Impl/Expressions/WrapperExpressionCreator.cs index ca4d519e..60251a41 100644 --- a/src/Grace/DependencyInjection/Impl/Expressions/WrapperExpressionCreator.cs +++ b/src/Grace/DependencyInjection/Impl/Expressions/WrapperExpressionCreator.cs @@ -181,7 +181,7 @@ public bool SetupWrappersForRequest(IInjectionScope scope, IActivationExpression { var primary = request.Filter == null ? collection.GetPrimary() : null; - if (primary != null) + if (primary != null && primary != request.RequestingStrategy) { wrappers = ImmutableLinkedList.Empty .Add(new WrapperActivationPathNode(primary, wrappedType, null)) @@ -207,6 +207,7 @@ public bool SetupWrappersForRequest(IInjectionScope scope, IActivationExpression } if (pass && + request.RequestingStrategy != strategy && (request.Filter == null || request.Filter(strategy))) { wrappers = ImmutableLinkedList.Empty diff --git a/src/Grace/DependencyInjection/Impl/InstanceStrategies/DelegateBaseExportStrategy.cs b/src/Grace/DependencyInjection/Impl/InstanceStrategies/DelegateBaseExportStrategy.cs index 44e56a99..5b735284 100644 --- a/src/Grace/DependencyInjection/Impl/InstanceStrategies/DelegateBaseExportStrategy.cs +++ b/src/Grace/DependencyInjection/Impl/InstanceStrategies/DelegateBaseExportStrategy.cs @@ -54,7 +54,7 @@ protected override IActivationExpressionResult CreateExpression(IInjectionScope protected virtual IActivationExpressionResult CreateExpression(IInjectionScope scope, IActivationExpressionRequest request) { - return ExpressionUtilities.CreateExpressionForDelegate(DelegateInstance, ShouldTrackDisposable(scope), scope, request); + return ExpressionUtilities.CreateExpressionForDelegate(DelegateInstance, ShouldTrackDisposable(scope), scope, request, this); } private bool ShouldTrackDisposable(IInjectionScope scope) diff --git a/tests/Grace.Tests/DependencyInjection/ConstructorSelection/TimedConstructorSelectionMethod.cs b/tests/Grace.Tests/DependencyInjection/ConstructorSelection/TimedConstructorSelectionMethod.cs index f29fe455..af0b3dda 100644 --- a/tests/Grace.Tests/DependencyInjection/ConstructorSelection/TimedConstructorSelectionMethod.cs +++ b/tests/Grace.Tests/DependencyInjection/ConstructorSelection/TimedConstructorSelectionMethod.cs @@ -28,7 +28,7 @@ public override IActivationExpressionResult CreateExpression(IInjectionScope sco var createDelegate = request.Services.Compiler.CompileDelegate(scope, timedCreateExpression); - return ExpressionUtilities.CreateExpressionForDelegate(createDelegate, false, scope, request); + return ExpressionUtilities.CreateExpressionForDelegate(createDelegate, false, scope, request, activationConfiguration.ActivationStrategy); } private IActivationExpressionResult CreateTimedCreateExpression(IInjectionScope scope, IActivationExpressionRequest request, TypeActivationConfiguration activationConfiguration, IActivationExpressionResult expression) diff --git a/tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs b/tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs new file mode 100644 index 00000000..b4f471ba --- /dev/null +++ b/tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Grace.DependencyInjection; +using Xunit; + +namespace Grace.Tests.DependencyInjection.Misc +{ + public class CompositePatternTests + { + public class TestContext + { + public Guid Id { get; set; } = Guid.Empty; + } + + [Fact] + public void CompositeFactoryTest() + { + var container = new DependencyInjectionContainer(); + + container.Configure(c => + { + c.Export(); + c.ExportFactory(context => + { + context.Id = Guid.NewGuid(); + return context; + }); + }); + + var instance = container.Locate(); + + Assert.NotNull(instance); + Assert.NotEqual(instance.Id, Guid.Empty); + } + + + [Fact] + public void CompositeFactoryFuncTest() + { + var container = new DependencyInjectionContainer(); + + container.Configure(c => + { + c.Export(); + c.ExportFactory, TestContext>(func => + { + var context = func(); + context.Id = Guid.NewGuid(); + return context; + }); + }); + + var instance = container.Locate(); + + Assert.NotNull(instance); + Assert.NotEqual(instance.Id, Guid.Empty); + } + + + } +} From dcbafcac559675fc4fba349f539bfd898babb8a5 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Sun, 22 Apr 2018 06:01:53 -0600 Subject: [PATCH 05/17] updating documentation --- .../DependencyInjection/Impl/InjectionContextValueProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Grace/DependencyInjection/Impl/InjectionContextValueProvider.cs b/src/Grace/DependencyInjection/Impl/InjectionContextValueProvider.cs index 4d79e529..ce091120 100644 --- a/src/Grace/DependencyInjection/Impl/InjectionContextValueProvider.cs +++ b/src/Grace/DependencyInjection/Impl/InjectionContextValueProvider.cs @@ -52,7 +52,7 @@ public class InjectionContextValueProvider : IInjectionContextValueProvider /// /// Get data from injection context /// - /// + /// /// /// /// From 55249dbed989bbaffa74d349332a0a903235cdb2 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Sun, 22 Apr 2018 09:30:22 -0600 Subject: [PATCH 06/17] adding support to build on ubuntu --- appveyor.yml | 1 + src/Grace.Dynamic/Grace.Dynamic.csproj | 1 + src/Grace.Factory/Grace.Factory.csproj | 1 + src/Grace/Grace.csproj | 2 +- tests/Grace.Tests/Grace.Tests.csproj | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 632372a3..258bb225 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,3 +29,4 @@ artifacts: name: Grace image: - Visual Studio 2017 +- Ubuntu \ No newline at end of file diff --git a/src/Grace.Dynamic/Grace.Dynamic.csproj b/src/Grace.Dynamic/Grace.Dynamic.csproj index f50748be..9038e5a2 100644 --- a/src/Grace.Dynamic/Grace.Dynamic.csproj +++ b/src/Grace.Dynamic/Grace.Dynamic.csproj @@ -4,6 +4,7 @@ IL Generation library for Grace dependency injection container Ian Johnson netstandard1.1;net45 + netstandard1.1 true Grace.Dynamic ..\Grace.snk diff --git a/src/Grace.Factory/Grace.Factory.csproj b/src/Grace.Factory/Grace.Factory.csproj index 798b3f8b..61eace3c 100644 --- a/src/Grace.Factory/Grace.Factory.csproj +++ b/src/Grace.Factory/Grace.Factory.csproj @@ -4,6 +4,7 @@ IL Generation library for Grace dependency injection container Ian Johnson netstandard1.1;net45 + netstandard1.1 true Grace.Factory ..\Grace.snk diff --git a/src/Grace/Grace.csproj b/src/Grace/Grace.csproj index 49f208b8..885ebf58 100644 --- a/src/Grace/Grace.csproj +++ b/src/Grace/Grace.csproj @@ -4,6 +4,7 @@ Grace is a feature rich Dependency Injection Container Ian Johnson netstandard1.0;net45 + netstandard1.0 true Grace ..\Grace.snk @@ -16,7 +17,6 @@ https://github.com/ipjohnson/Grace/blob/master/License.md git https://github.com/ipjohnson/Grace - 1.6.0 false false false diff --git a/tests/Grace.Tests/Grace.Tests.csproj b/tests/Grace.Tests/Grace.Tests.csproj index 3798e09a..a73cb576 100644 --- a/tests/Grace.Tests/Grace.Tests.csproj +++ b/tests/Grace.Tests/Grace.Tests.csproj @@ -2,6 +2,7 @@ netcoreapp1.0;net452 + netcoreapp1.0 Grace.Tests Grace.Tests true From 1e9613c2e849b0ad94feccc9606ccdef1c211737 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Sun, 22 Apr 2018 09:37:29 -0600 Subject: [PATCH 07/17] adding tag back --- src/Grace/Grace.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Grace/Grace.csproj b/src/Grace/Grace.csproj index 885ebf58..e66ef94d 100644 --- a/src/Grace/Grace.csproj +++ b/src/Grace/Grace.csproj @@ -17,6 +17,7 @@ https://github.com/ipjohnson/Grace/blob/master/License.md git https://github.com/ipjohnson/Grace + 1.6.0 false false false From 7c24d90c13e2ae2a58290ab161b6b85dc5745e62 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Sun, 22 Apr 2018 11:05:18 -0600 Subject: [PATCH 08/17] add dotnet test for ubuntu --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index 258bb225..637e06fc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -24,6 +24,7 @@ after_build: test_script: - cmd: cd tests/Grace.Tests/ - cmd: CodeCoverageAppVeyor.cmd +- ps: dotnet test tests/Grace.Tests/Grace.Tests.csproj artifacts: - path: Grace*.nupkg name: Grace From f19dedfb1cea79b2e235a69df1cfd07f2076d2a9 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Sun, 22 Apr 2018 11:13:48 -0600 Subject: [PATCH 09/17] changing to ubuntu only command --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 637e06fc..19ea81fa 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -24,7 +24,7 @@ after_build: test_script: - cmd: cd tests/Grace.Tests/ - cmd: CodeCoverageAppVeyor.cmd -- ps: dotnet test tests/Grace.Tests/Grace.Tests.csproj +- sh: dotnet test tests/Grace.Tests/Grace.Tests.csproj artifacts: - path: Grace*.nupkg name: Grace From 9d231b65aab2eac61b967b0be36d4a98656d63c6 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Mon, 23 Apr 2018 21:17:43 -0600 Subject: [PATCH 10/17] formatting change --- .../Impl/FluentDecoratorStrategyConfiguration.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Grace/DependencyInjection/Impl/FluentDecoratorStrategyConfiguration.cs b/src/Grace/DependencyInjection/Impl/FluentDecoratorStrategyConfiguration.cs index 313c26de..76e0721f 100644 --- a/src/Grace/DependencyInjection/Impl/FluentDecoratorStrategyConfiguration.cs +++ b/src/Grace/DependencyInjection/Impl/FluentDecoratorStrategyConfiguration.cs @@ -18,8 +18,7 @@ public FluentDecoratorStrategyConfiguration(ICompiledDecoratorStrategy strategy) { _strategy = strategy; } - - + /// /// Apply decorator after lifestyle, by default it's before /// From 331f50398c0129bdc70967ab774a5c8d3b9141a4 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Wed, 16 May 2018 19:24:44 -0600 Subject: [PATCH 11/17] adding composite pattern test --- .../Misc/CompositePatternTests.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs b/tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs index b4f471ba..786b6de3 100644 --- a/tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs +++ b/tests/Grace.Tests/DependencyInjection/Misc/CompositePatternTests.cs @@ -58,5 +58,26 @@ public void CompositeFactoryFuncTest() } + [Fact] + public void CompositeDecoratorFactoryFuncTest() + { + var container = new DependencyInjectionContainer(); + + container.Configure(c => + { + c.Export(); + c.ExportDecoratorFactory, TestContext>(func => + { + var context = func(); + context.Id = Guid.NewGuid(); + return context; + }); + }); + + var instance = container.Locate(); + + Assert.NotNull(instance); + Assert.NotEqual(instance.Id, Guid.Empty); + } } } From bda557183710934266a378b9150360e85b5df4bb Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Wed, 16 May 2018 19:25:29 -0600 Subject: [PATCH 12/17] changing to use newer syntax --- .../CompiledFactoryDecoratorStrategy.cs | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/Grace/DependencyInjection/Impl/CompiledStrategies/CompiledFactoryDecoratorStrategy.cs diff --git a/src/Grace/DependencyInjection/Impl/CompiledStrategies/CompiledFactoryDecoratorStrategy.cs b/src/Grace/DependencyInjection/Impl/CompiledStrategies/CompiledFactoryDecoratorStrategy.cs new file mode 100644 index 00000000..087423f8 --- /dev/null +++ b/src/Grace/DependencyInjection/Impl/CompiledStrategies/CompiledFactoryDecoratorStrategy.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Grace.DependencyInjection.Impl.Expressions; +using Grace.DependencyInjection.Lifestyle; + +namespace Grace.DependencyInjection.Impl.CompiledStrategies +{ + public class CompiledFactoryDecoratorStrategy : ConfigurableActivationStrategy, ICompiledDecoratorStrategy + { + private Delegate _delegate; + + /// + /// Default constructor + /// + /// + /// owning injection scope + public CompiledFactoryDecoratorStrategy(Delegate @delegate, IInjectionScope injectionScope) : base(typeof(T), injectionScope) + { + _delegate = @delegate; + } + + /// + /// Type of activation strategy + /// + public override ActivationStrategyType StrategyType { get; } = ActivationStrategyType.DecoratorStrategy; + + /// + /// Get an activation expression for this strategy + /// + /// + /// + /// + /// + public IActivationExpressionResult GetDecoratorActivationExpression(IInjectionScope scope, + IActivationExpressionRequest request, ICompiledLifestyle lifestyle) + { + if (lifestyle == null) + { + return InternalGetDecoratorActivationExpression(scope, request); + } + + if (ApplyAfterLifestyle) + { + return lifestyle.ProvideLifestyleExpression( + scope, request, lifestyleRequest => InternalGetDecoratorActivationExpression(scope, lifestyleRequest)); + } + + return lifestyle.ProvideLifestyleExpression( + scope, request, lifestyleRequest => InternalGetDecoratorActivationExpression(scope, request)); + } + + /// + /// Apply the decorator after a lifestyle has been used + /// + public bool ApplyAfterLifestyle { get; set; } + + /// + /// Get decorator expression + /// + /// + /// + /// + protected virtual IActivationExpressionResult InternalGetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request) + { + return ExpressionUtilities.CreateExpressionForDelegate(_delegate, false, InjectionScope, request, this); + } + } +} From 0265e82a44201b7020f43644fad276d9b2275622 Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Wed, 16 May 2018 19:25:53 -0600 Subject: [PATCH 13/17] cleanup --- .gitignore | 2 ++ .../IExportRegistrationBlock.cs | 2 +- .../IExportRegistrationBlockExtensions.cs | 17 ++++++++++---- .../DisposalScopeExpressionCreator.cs | 23 ++++++------------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 1e9623f2..cbc17b6e 100644 --- a/.gitignore +++ b/.gitignore @@ -180,3 +180,5 @@ $RECYCLE.BIN/ /.vs/config/applicationhost.config /.vs/Grace/v15/sqlite3/storage.ide /.vs/Grace/v15/sqlite3/storage.ide-journal +/.vs/Grace/v15 +/.vs/Grace/DesignTimeBuild/.dtbcache diff --git a/src/Grace/DependencyInjection/IExportRegistrationBlock.cs b/src/Grace/DependencyInjection/IExportRegistrationBlock.cs index 74395f12..39908c8d 100644 --- a/src/Grace/DependencyInjection/IExportRegistrationBlock.cs +++ b/src/Grace/DependencyInjection/IExportRegistrationBlock.cs @@ -92,7 +92,7 @@ public interface IExportRegistrationBlock /// decorator logic /// void ExportDecorator(Func apply, bool applyAfterLifestyle = true); - + /// /// Export an expression tree /// diff --git a/src/Grace/DependencyInjection/IExportRegistrationBlockExtensions.cs b/src/Grace/DependencyInjection/IExportRegistrationBlockExtensions.cs index 7832bee9..ab18cc3e 100644 --- a/src/Grace/DependencyInjection/IExportRegistrationBlockExtensions.cs +++ b/src/Grace/DependencyInjection/IExportRegistrationBlockExtensions.cs @@ -4,6 +4,7 @@ using System.Linq.Expressions; using System.Reflection; using Grace.DependencyInjection.Impl; +using Grace.DependencyInjection.Impl.CompiledStrategies; using Grace.DependencyInjection.Impl.Expressions; namespace Grace.DependencyInjection @@ -117,6 +118,12 @@ public static IFluentExportInstanceConfiguration ExportNamedValue( throw new Exception("This method can only be used on members (i.e. ExportNamedValue(() => SomeProperty))"); } + public static void ExportDecoratorFactory(this IExportRegistrationBlock registrationBlock, + Func factory) + { + registrationBlock.AddActivationStrategy(new CompiledFactoryDecoratorStrategy(factory, registrationBlock.OwningScope)); + } + /// /// Import all members of a specific type and can be filtered /// @@ -280,11 +287,11 @@ public static IExportRegistrationBlock ExcludeTypeFromAutoRegistration(this IExp public static IExportRegistrationBlock ExportInitialize(this IExportRegistrationBlock block, Action initializeAction) { - var func = new Func(instance => - { - initializeAction((T) instance); - return instance; - }); + var func = new Func(instance => + { + initializeAction((T)instance); + return instance; + }); block.AddInspector(new ExportInitializeInspector(func, typeof(T))); diff --git a/src/Grace/DependencyInjection/Impl/Expressions/DisposalScopeExpressionCreator.cs b/src/Grace/DependencyInjection/Impl/Expressions/DisposalScopeExpressionCreator.cs index 8fd47191..f850210f 100644 --- a/src/Grace/DependencyInjection/Impl/Expressions/DisposalScopeExpressionCreator.cs +++ b/src/Grace/DependencyInjection/Impl/Expressions/DisposalScopeExpressionCreator.cs @@ -74,25 +74,16 @@ public IActivationExpressionResult CreateExpression(IInjectionScope scope, IActi /// /// Method info for add method on IDisposalScope /// - protected MethodInfo AddMethod - { - get - { - return _addMethod ?? - (_addMethod = typeof(IDisposalScope).GetTypeInfo().DeclaredMethods.First(m => m.Name == "AddDisposable" && m.GetParameters().Length == 1)); - } - } + protected MethodInfo AddMethod=> _addMethod ?? + (_addMethod = typeof(IDisposalScope).GetTypeInfo().DeclaredMethods.First(m => m.Name == "AddDisposable" && + m.GetParameters().Length == 1)); + /// /// Method info for add method on IDisposalScope with cleanup delegate /// - protected MethodInfo AddMethodWithCleanup - { - get - { - return _addMethod ?? - (_addMethod = typeof(IDisposalScope).GetTypeInfo().DeclaredMethods.First(m => m.Name == "AddDisposable" && m.GetParameters().Length == 2)); - } - } + protected MethodInfo AddMethodWithCleanup => _addMethod ?? + (_addMethod = typeof(IDisposalScope).GetTypeInfo().DeclaredMethods.First(m => m.Name == "AddDisposable" && + m.GetParameters().Length == 2)); } } From 604c4260948986d9e0a1caf486e3f9eda02ced1d Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Fri, 18 May 2018 20:37:58 -0600 Subject: [PATCH 14/17] adding source link --- src/Grace/Grace.csproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Grace/Grace.csproj b/src/Grace/Grace.csproj index e66ef94d..1c32b274 100644 --- a/src/Grace/Grace.csproj +++ b/src/Grace/Grace.csproj @@ -22,6 +22,11 @@ false false full + + + true + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb From aa8511e5e70a8f11df8e54ee4829f4b4ed85266e Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Fri, 18 May 2018 20:48:41 -0600 Subject: [PATCH 15/17] adding source link reference --- src/Grace/Grace.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Grace/Grace.csproj b/src/Grace/Grace.csproj index 1c32b274..b42952ed 100644 --- a/src/Grace/Grace.csproj +++ b/src/Grace/Grace.csproj @@ -28,7 +28,9 @@ true $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - + + + From dc92322eaf46ffa16e62c1c402ba6899f25d2f0a Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Fri, 18 May 2018 20:59:33 -0600 Subject: [PATCH 16/17] enabling source link for issue #159 --- src/Grace.Dynamic/Grace.Dynamic.csproj | 6 ++++++ src/Grace.Factory/Grace.Factory.csproj | 8 +++++++- src/Grace/Grace.csproj | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Grace.Dynamic/Grace.Dynamic.csproj b/src/Grace.Dynamic/Grace.Dynamic.csproj index 9038e5a2..b0e0f660 100644 --- a/src/Grace.Dynamic/Grace.Dynamic.csproj +++ b/src/Grace.Dynamic/Grace.Dynamic.csproj @@ -21,10 +21,16 @@ false false full + + + true + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + diff --git a/src/Grace.Factory/Grace.Factory.csproj b/src/Grace.Factory/Grace.Factory.csproj index 61eace3c..204cb1a9 100644 --- a/src/Grace.Factory/Grace.Factory.csproj +++ b/src/Grace.Factory/Grace.Factory.csproj @@ -1,4 +1,4 @@ - + IL Generation library for Grace dependency injection container @@ -21,10 +21,16 @@ false false full + + + true + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + diff --git a/src/Grace/Grace.csproj b/src/Grace/Grace.csproj index b42952ed..6d04a0d3 100644 --- a/src/Grace/Grace.csproj +++ b/src/Grace/Grace.csproj @@ -29,7 +29,7 @@ $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - + From 1141bd705b48b9efba01b336aa021e4d1a53ecad Mon Sep 17 00:00:00 2001 From: ipjohnson Date: Fri, 18 May 2018 21:08:40 -0600 Subject: [PATCH 17/17] adjusting source link for ubuntu for issue #139 --- src/Grace.Dynamic/Grace.Dynamic.csproj | 7 ++++++- src/Grace.Factory/Grace.Factory.csproj | 7 ++++++- src/Grace/Grace.csproj | 12 ++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/Grace.Dynamic/Grace.Dynamic.csproj b/src/Grace.Dynamic/Grace.Dynamic.csproj index b0e0f660..b9ccf0c2 100644 --- a/src/Grace.Dynamic/Grace.Dynamic.csproj +++ b/src/Grace.Dynamic/Grace.Dynamic.csproj @@ -21,7 +21,9 @@ false false full + + true true @@ -30,7 +32,10 @@ - + + + + diff --git a/src/Grace.Factory/Grace.Factory.csproj b/src/Grace.Factory/Grace.Factory.csproj index 204cb1a9..de173a4b 100644 --- a/src/Grace.Factory/Grace.Factory.csproj +++ b/src/Grace.Factory/Grace.Factory.csproj @@ -21,7 +21,9 @@ false false full + + true true @@ -30,7 +32,10 @@ - + + + + diff --git a/src/Grace/Grace.csproj b/src/Grace/Grace.csproj index 6d04a0d3..2dea23e3 100644 --- a/src/Grace/Grace.csproj +++ b/src/Grace/Grace.csproj @@ -22,15 +22,19 @@ false false full + - + + true true $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - - - + + + + +