Mercurial > pub > Impl
view lib/IMPL/Config/Descriptor.pm @ 417:3ed0c58e9da3 ref20150831
working on di container, tests
author | cin |
---|---|
date | Mon, 02 Nov 2015 01:56:53 +0300 |
parents | 3d24b10dd0d5 |
children | df591e3afd10 |
line wrap: on
line source
package IMPL::Config::Descriptor; use strict; use IMPL::Exception(); use Scalar::Util qw(looks_like_number); sub ACTIVATE_SINGLETON() { 1 } sub ACTIVATE_CONTAINER() { 2 } sub ACTIVATE_CONTEXT() { 3 } sub ACTIVATE_CALL() { 4 } my %activateNames = ( singleton => ACTIVATE_SINGLETON, container => ACTIVATE_CONTAINER, context => ACTIVATE_CONTEXT, call => ACTIVATE_CALL ); my %activateNamesLookup = map { $activateNames{$_}, $_ } keys %activateNames; sub Activate { my ( $this, $context ) = @_; die IMPL::NotImplementedException->new(); } sub ParseActivation { my $val = pop @_; return ACTIVATE_CALL unless $val; return grep $_ == $val, ACTIVATE_SINGLETON, ACTIVATE_CONTAINER, ACTIVATE_CONTEXT, ACTIVATE_CALL ? $val : ACTIVATE_CALL if looks_like_number($val); return $activateNames{ lc($val) } || ACTIVATE_CALL; } sub ActivationToString { my $val = pop @_; return ( $val && $activateNamesLookup{$val} ) || ''; } 1; __END__ =pod =head1 NAME C<IMPL::Config::Descriptor> - the abstract base types for the service descriptors =head1 SYNOPSIS =begin code package MyDescriptor; use IMPL::declare { base => { 'IMPL::Config::Descriptor' => '@_' } }; sub Activate { my ($this,$context) = @_; my $service = $context->GetService('service'); my } =end code =head1 MEMBERS =head1 SEE ALSO =over =item * L<ReferenceDescriptor> - describes a reference to the service =item * L<ServiceDescriptor> - descibes a service factory =item * L<ValueDescriptor> - describes a value =back =cut