summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-04-15 23:52:31 -0500
committerJesse Luehrs <doy@tozt.net>2011-04-15 23:52:31 -0500
commit1d668665354678a7c9f95e5eb97ae0e27c62cd4c (patch)
tree017f9113a22401e325ba5c215a8e64096438f208 /lib
parent3405a817789d09aaad2a0476ec508ec4d5def9bf (diff)
downloadbread-board-declare-1d668665354678a7c9f95e5eb97ae0e27c62cd4c.tar.gz
bread-board-declare-1d668665354678a7c9f95e5eb97ae0e27c62cd4c.zip
get auto-inferring services working
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);
}