diff --git a/src/components/dependency_injection/spec/compiler_passes/process_parameters_spec.cr b/src/components/dependency_injection/spec/compiler_passes/process_parameters_spec.cr index 0a5909e0..3394f20e 100644 --- a/src/components/dependency_injection/spec/compiler_passes/process_parameters_spec.cr +++ b/src/components/dependency_injection/spec/compiler_passes/process_parameters_spec.cr @@ -63,4 +63,40 @@ describe ADI::ServiceContainer::ProcessParameters, tags: "compiled" do end CR end + + it "does not override value of manually wired up parameters with default value" do + ASPEC::Methods.assert_success <<-CR, codegen: true + require "../spec_helper.cr" + + class SomeService + def initialize(@id : Int32 = 123); end + end + + module MyExtension + macro included + macro finished + {% verbatim do %} + {% + SERVICE_HASH["some_service"] = { + class: SomeService, + parameters: { + id: {value: 999} + } + } + %} + {% end %} + end + end + end + + ADI.add_compiler_pass MyExtension, :before_optimization, 1028 + ADI::ServiceContainer.new + + macro finished + macro finished + it { \\{{ADI::ServiceContainer::SERVICE_HASH["some_service"]["parameters"]["id"]["value"].stringify}}.should eq "999" } + end + end + CR + end end diff --git a/src/components/dependency_injection/src/compiler_passes/process_parameters.cr b/src/components/dependency_injection/src/compiler_passes/process_parameters.cr index e6be8f71..8915abc1 100644 --- a/src/components/dependency_injection/src/compiler_passes/process_parameters.cr +++ b/src/components/dependency_injection/src/compiler_passes/process_parameters.cr @@ -36,7 +36,7 @@ module Athena::DependencyInjection::ServiceContainer::ProcessParameters # Set the default value is there is one. if !(dv = initializer_arg.default_value).is_a?(Nop) - default_value = value = dv + default_value = dv end parameters[initializer_arg.name.id.stringify] = { @@ -47,7 +47,7 @@ module Athena::DependencyInjection::ServiceContainer::ProcessParameters restriction: initializer_arg.restriction, resolved_restriction: ((r = initializer_arg.restriction).is_a?(Nop) ? nil : r.resolve), default_value: default_value, - value: value || default_value, + value: value.nil? ? default_value : value, } end end