Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
IOC::Container::MethodUserlContributed PerlIOC::Container::MethodResolution(3)

NAME
       IOC::Container::MethodResolution	- An IOC Container object which
       support method resolution of services

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

DESCRIPTION
       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 |
	  +----------------------------------+

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

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
AUTHOR
       stevan little, <stevan@iinteractive.com>

COPYRIGHT AND LICENSE
       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.

perl v5.24.1			  2007-04-2IOC::Container::MethodResolution(3)

NAME | SYNOPSIS | DESCRIPTION | METHODS | TO DO | BUGS | CODE COVERAGE | SEE ALSO | AUTHOR | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=IOC::Container::MethodResolution&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help