summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-04-16 16:41:58 -0500
committerJesse Luehrs <doy@tozt.net>2011-04-16 16:41:58 -0500
commit8ae4f9f692f39a7a6dd6fed422b878d568210269 (patch)
treef4f9dffd11d828525dfd6606192322c4ad09104a /lib
parent64b0df203441b83a6601371bfadb1aac634e5d20 (diff)
downloadbread-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.pm7
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);