From 1d668665354678a7c9f95e5eb97ae0e27c62cd4c Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 15 Apr 2011 23:52:31 -0500 Subject: get auto-inferring services working --- lib/Bread/Board/Declare/Role/Object.pm | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'lib') 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); } -- cgit v1.2.3