diff options
author | Jesse Luehrs <doy@tozt.net> | 2011-04-16 16:41:58 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2011-04-16 16:41:58 -0500 |
commit | 8ae4f9f692f39a7a6dd6fed422b878d568210269 (patch) | |
tree | f4f9dffd11d828525dfd6606192322c4ad09104a /lib | |
parent | 64b0df203441b83a6601371bfadb1aac634e5d20 (diff) | |
download | bread-board-declare-8ae4f9f692f39a7a6dd6fed422b878d568210269.tar.gz bread-board-declare-8ae4f9f692f39a7a6dd6fed422b878d568210269.zip |
make sure definition order doesn't matter for inferring services
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Bread/Board/Declare/Role/Object.pm | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/Bread/Board/Declare/Role/Object.pm b/lib/Bread/Board/Declare/Role/Object.pm index c3f11a9..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; @@ -30,7 +35,7 @@ after BUILD => sub { my $inferred = Bread::Board::Service::Inferred->new( current_container => $self, service => $service->clone, - )->infer_service($service->class); + )->infer_service($service->class, \%seen); $self->add_service($inferred); $self->add_type_mapping_for($service->class, $inferred); |