IOC::Service::Parameterized - An IOC Service object which accepts a set of parameters for the instance


IOC documentation Contained in the IOC distribution.

Index


Code Index:

NAME

Top

IOC::Service::Parameterized - An IOC Service object which accepts a set of parameters for the instance

DESCRIPTION

Top

This is just like IOC::Service::Prototype, expect that it will accepts a set of key/value parameters to the instance method. It is used to support IOC::Service::Parameterized.

          +--------------+
          | IOC::Service |
          +--------------+
                 |
                 ^
                 |
  +-----------------------------+
  | IOC::Service::Parameterized |
  +-----------------------------+

CAVEAT

Top

It does not make any sense to have ConstructorInjection or SetterInjection subclasses of this, so they will probably never get created (at least not by me).

METHODS

Top

instance (%params)

This method returns the literal value held by the service object based on the parameters.

setContainer ($c)

This just makes sure that our service is always being added to IOC::Container::Parameterized container objects. Otherwise the parameterization wouldn't work.

deferred

A parameterized service does not support being deferred.

BUGS

Top

None that I am aware of. Of course, if you find a bug, let me know, and I will be sure to fix it.

CODE COVERAGE

Top

I use Devel::Cover to test the code coverage of my tests, see the CODE COVERAGE section of IOC for more information.

SEE ALSO

Top

AUTHOR

Top

stevan little, <stevan@iinteractive.com>

COPYRIGHT AND LICENSE

Top


IOC documentation Contained in the IOC distribution.

package IOC::Service::Parameterized;

use strict;
use warnings;

our $VERSION = '0.01';

use Scalar::Util qw(blessed);

use IOC::Exceptions;

use base 'IOC::Service::Prototype';

sub instance {
    my ($self, %params) = @_;
    (defined($self->{container}))
        || throw IOC::IllegalOperation "Cannot create a service instance without setting container";    
    # we need to be sure to not store this value
    # otherwise we will add a ref count to it 
    return $self->{block}->($self->{container}, %params);
}

sub deferred {
    throw IOC::IllegalOperation "Parameterized services cannot be deferred";
}

1;

__END__