IOC::Registry - Registry singleton for the IOC Framework
use IOC::Registry; my $container = IOC::Container->new('database'); my $other_container = IOC::Container->new('logging'); # ... bunch of IOC::Container creation code omitted # create a registry singleton my $reg = IOC::Registry->new(); $reg->registerContainer($container); $reg->registerContainer($other_container); # ... somewhere later in your program my $reg = IOC::Registry->instance(); # get the singleton # and try and find a service my $service = $reg->searchForService('laundry') || die "Could not find the laundry service"; my $database = $reg->getRegisteredContainer('database'); # get a list of container names my @container_names = $reg->getRegisteredContainerList(); # and you can unregister containers too my $unregistered_container = $reg->unregisterContainer($container);
This is a singleton object which is meant to be used as a global registry for all your IoC needs.
Creates a new singleton instance of the Registry, the same singleton will be returned each time new is called after the first one.
new
This method will add a $container to the registry, where it can be accessed by it's name.
$container
This method accepts either the $container instance itself, or the $name of the container and removes said container from the registry.
$name
This will return true (1) if a container by that $name exists within the registry, and false (0) otherwise.
1
0
This will retrieve a registered container by $name from the registry. If $name is not defined, then an IOC::InsufficientArguments exception will be thrown. If no container is found with $name, then an IOC::ContainerNotFound exception will be thrown.
This will return the list of string names of all the registered containers.
This allows you to alias a path to a real service ($real_path) to be accessible from a different path ($alias_path). Basically, it is sometimes useful for the same service to be found at two different paths, especially when re-useing and combining IOC configurations for different frameworks.
$real_path
$alias_path
The aliases set by this method will only affect the services retrieved through the locateService method. The aliases do not have any meaning outside of the IOC::Registry.
locateService
NOTE: There is no easy way to validate that the $real_path is actually a valid path, so we make the assumption that you know what you are doing.
Given a $path to a service, this will locate the service and return it. If $path is not specificed an IOC::InsufficientArguments exception will be thrown.
$path
Given a $name for a service, this will attempt to locate the service within the entire heirarchy and return it. If the service is not found, then this method will return undef. If $name is not specificed an IOC::InsufficientArguments exception will be thrown.
undef
Given a $path to a container, this will locate the container and return it. If $path is not specificed an IOC::InsufficientArguments exception will be thrown.
Given a $name for a container, this will attempt to locate the container within the entire heirarchy and return it. If the container is not found, then this method will return undef. If $name is not specificed an IOC::InsufficientArguments exception will be thrown.
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.
This is a subclass of Class::StrongSingleton, if you want to know about how the singleton-ness is handled, check there.
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.