summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Bread/Board/Declare/Role/Object.pm25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/Bread/Board/Declare/Role/Object.pm b/lib/Bread/Board/Declare/Role/Object.pm
index 505d87b..7ed647e 100644
--- a/lib/Bread/Board/Declare/Role/Object.pm
+++ b/lib/Bread/Board/Declare/Role/Object.pm
@@ -25,6 +25,31 @@ after BUILD => sub {
)
);
}
+ elsif ($service->isa('Bread::Board::Declare::ConstructorInjection')
+ && (my $meta = Class::MOP::class_of($service->class))) {
+ my $inferred = Bread::Board::Service::Inferred->new(
+ current_container => $self,
+ )->infer_service($service->class);
+
+ my %deps = (
+ %{ $inferred->dependencies },
+ %{ $service->dependencies },
+ );
+
+ my $type_service = $inferred->clone(
+ dependencies => \%deps,
+ );
+
+ $self->add_service($type_service);
+ $self->add_type_mapping_for($service->class, $type_service);
+
+ $self->add_service(
+ Bread::Board::Service::Alias->new(
+ name => $service->name,
+ aliased_from_path => $type_service->name,
+ )
+ );
+ }
else {
$self->add_service($service->clone);
}