
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.
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.


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.


stevan little, <stevan@iinteractive.com>

Copyright 2004-2007 by Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.