IoC

NAME

IoC - Wire your application components together using inversion of control

SYNOPSIS

use IoC;
my $c = container 'myapp' => contains {
service 'logfile' => 'logfile.txt';
service 'logger' => {
          'class'        => 'MyLogger',
          'lifecycle'    => 'Singleton',
          'dependencies' => {'logfile' => 'logfile'},
      };
service 'storage' => {
          'lifecycle' => 'Singleton',
          'block'     => sub {
              ...
              return MyStorage.new();
          },
      };
service 'app' => {
          'class'        => 'MyApp',
          'lifecycle'    => 'Signleton',
          'dependencies' => {
              'logger'  => 'logger',
              'storage' => 'storage',
          },
      };
};
my $app = $c.resolve(service => 'app');
  $app.run();

DESCRIPTION

IoC is a port of stevan++'s Perl 5 module Bread::Board.

INVERSION OF CONTROL

Inversion of control is a way of keeping all your component creation logic in one place. Instead of creating an object and explicitly pass it around everywhere, one could just make a container of all these components and allow the components to cleanly interact with each other as services.

EXPORTED FUNCTIONS

  • container

Creates a new IoC::Container object. In the block you create your services.

  • service

Adds services to your container, bringing your components together. See IoC::Service for more information on this.

BUGS

All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or post an issue to http://github.com/jasonmay/perl6-ioc/

REFERENCE

  • IoC::Container - Container of all your application components

  • IoC::Service - Service representing a component in your application

ACKNOWLEDGEMENTS

  • Thanks to Stevan Little who is the original author of Perl 5's Bread::Board

AUTHOR

Jason May, <[email protected]>

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.