IOC::Service::SetterInjection - An IOC Service object which uses Setter Injection
use IOC::Service::SetterInjection; my $service = IOC::Service::SetterInjection->new('logger' => ( 'FileLogger', 'new', [ # fetch a component from another container { setLogFileHandle => '/filesystem/log_file_handle' }, # fetch a component from our own container { setLogFileFormat => 'log_file_format' } ]));
In this IOC framework, the IOC::Service::SetterInjection object holds instances of components to be managed.
+--------------+ | IOC::Service | +--------------+ | ^ | +-------------------------------+ | IOC::Service::SetterInjection | +-------------------------------+
Creates a service with a $name, and uses the $component_class and $component_constructor string arguments to initialize the service on demand.
$name
$component_class
$component_constructor
If the $component_class and $component_constructor arguments are not defined, an IOC::InsufficientArguments exception will be thrown.
Upon request of the component managed by this service, an attempt will be made to load the $component_class. If that loading fails, an IOC::ClassLoadingError exception will be thrown with the details of the underlying error. If the $component_class loads successfully, then it will be inspected for an available $component_constructor method. If the $component_constructor method is not found, an IOC::ConstructorNotFound exception will be thrown. If the $component_constructor method is found, then it will be called.
Once a valid instance has been created, then the $setter_parameter array ref is looped through. Each parameter is then a hash ref, the key being the setter method name and the value being the name of a Service (available through get or find). It is then checked if the setter method is available, if not a IOC::MethodNotFound exception is thrown. It if is found, then it is called and passed the value of the resolved service name.
$setter_parameter
get
find
None that I am aware of. Of course, if you find a bug, let me know, and I will be sure to fix it.
I use Devel::Cover to test the code coverage of my tests, see the CODE COVERAGE section of IOC for more information.
http://docs.codehaus.org/display/PICO/Setter+Injection
stevan little, <stevan@iinteractive.com>
Copyright 2004-2007 by Infinity Interactive, Inc.
http://www.iinteractive.com
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install IOC, copy and paste the appropriate command in to your terminal.
cpanm
cpanm IOC
CPAN shell
perl -MCPAN -e shell install IOC
For more information on module installation, please visit the detailed CPAN module installation guide.