The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

IOC::Registry - Registry singleton for the IOC Framework

SYNOPSIS

  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);

DESCRIPTION

This is a singleton object which is meant to be used as a global registry for all your IoC needs.

METHODS

new

Creates a new singleton instance of the Registry, the same singleton will be returned each time new is called after the first one.

Container Registration Methods

registerContainer ($container)

This method will add a $container to the registry, where it can be accessed by it's name.

unregisterContainer ($container|$name)

This method accepts either the $container instance itself, or the $name of the container and removes said container from the registry.

hasRegisteredContainer ($name)

This will return true (1) if a container by that $name exists within the registry, and false (0) otherwise.

getRegisteredContainer ($name)

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.

getRegisteredContainerList

This will return the list of string names of all the registered containers.

Search Methods

locateService ($path)

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.

searchForService ($name)

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.

locateContainer ($path)

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.

searchForContainer ($name)

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.

TO DO

Work on the documentation

BUGS

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

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

SEE ALSO

Class::StrongSingleton

This is a subclass of Class::StrongSingleton, if you want to know about how the singleton-ness is handled, check there.

AUTHOR

stevan little, <stevan@iinteractive.com>

COPYRIGHT AND LICENSE

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