diff options
Diffstat (limited to 'lib/Bread')
-rw-r--r-- | lib/Bread/Board/Declare/Role/Object.pm | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Bread/Board/Declare/Role/Object.pm b/lib/Bread/Board/Declare/Role/Object.pm index 505d87b..9d4a938 100644 --- a/lib/Bread/Board/Declare/Role/Object.pm +++ b/lib/Bread/Board/Declare/Role/Object.pm @@ -14,6 +14,11 @@ after BUILD => sub { my $meta = Class::MOP::class_of($self); + my %seen = ( + map { $_->class => $_->name } + grep { $_->isa('Bread::Board::Declare::ConstructorInjection') && Class::MOP::class_of($_->class) } + $meta->get_all_services + ); for my $service ($meta->get_all_services) { if ($service->isa('Bread::Board::Declare::BlockInjection')) { my $block = $service->block; @@ -25,6 +30,16 @@ 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, + service => $service->clone, + )->infer_service($service->class, \%seen); + + $self->add_service($inferred); + $self->add_type_mapping_for($service->class, $inferred); + } else { $self->add_service($service->clone); } |