IOC::Container::MethodResolution - An IOC Container object which support method resolution of services
use IOC::Container; my $container = IOC::Container->new(); $container->register(IOC::Service::Literal->new('log_file' => "logfile.log")); $container->register(IOC::Service->new('logger' => sub { my $c = shift; return FileLogger->new($c->log_file()); })); $container->register(IOC::Service->new('application' => sub { my $c = shift; my $app = Application->new(); $app->logger($c->logger()); return $app; })); $container->application()->run(); # or a more complex example # utilizing a tree-like structure # of services my $logging = IOC::Container->new('logging'); $logging->register(IOC::Service->new('logger' => sub { my $c = shift; return My::FileLogger->new($c->root()->filesystem()->filemanager()->openFile($c->log_file())); })); $logging->register(IOC::Service::Literal->new('log_file' => '/var/my_app.log')); my $database = IOC::Container->new('database'); $database->register(IOC::Service->new('connection' => sub { my $c = shift; return My::DB->connect($c->dsn(), $c->username(), $c->password()); })); $database->register(IOC::Service::Literal->new('dsn' => 'dbi:mysql:my_app')); $database->register(IOC::Service::Literal->new('username' => 'test')); $database->register(IOC::Service::Literal->new('password' => 'secret_test')); my $file_system = IOC::Container->new('filesystem'); $file_system->register(IOC::Service->new('filemanager' => sub { return My::FileManager->new() })); my $container = IOC::Container->new(); $container->addSubContainers($file_system, $database, $logging); $container->register(IOC::Service->new('application' => sub { my $c = shift; my $app = My::Application->new(); $app->logger($c->root()->logging()->logger()); $app->db_connection($c->root()->database()->connection()); return $app; })); $container->application()->run();
In this IOC framework, the IOC::Container::MethodResolution object holds instances of keyed IOC::Service objects which can be called as methods.
+----------------+ | IOC::Container | +----------------+ | ^ | +----------------------------------+ | IOC::Container::MethodResolution | +----------------------------------+
There are no new methods for this subclass, but when a service is registered, the name of the service becomes a valid method for this particular container instance.
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.
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.