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

Micro::Container - Lite weight and inheritable object container

SYNOPSIS

package MyContainer;
use parent 'Micro::Container';

__PACKAGE__->register(
    JSON => [],
);

package MyContainer::Child;
use parent 'MyContainer';

__PACKAGE__->register(
    MessagePack => sub {
        my $c = shift;
        my $mp = $c->load_class('Data::MessagePack')->new;
        $mp->utf8;
        $mp;
    },
);

package main;
use MyContainer::Child;

my $container = MyContainer::Child->instance;
say $container->get('JSON')->encode_json({ foo => 'bar' });
my $data = $container->get('MessagePack')->decode($message_pack_string);

DESCRIPTION

Micro::Container is inheritable object container.

METHODS

instance()

Returns instance.

package MyContainer;
use parent 'Micro::Container';

package main;
use MyContainer;

my $container = MyContainer->instance;

register(%args)

add(%args)

Register objects to container.

package MyContainer;
use parent 'Micro::Container';

__PACKAGE__->register(
    'LWP::UserAgent' => [ agent => 'FooBar' ],
    JSON             => sub {
        my $c = shift;
        $c->load_class('JSON')->new->utf8;
    },
);

unregister(@names)

remove(@names)

Remove registered objects by name.

MyContainer->unregister('JSON', 'LWP::UserAgent');

get($name)

Get registered method.

my $json = MyContainer->get('JSON');

load_class($class, $prefix)

Constructs a class name and require the class.

Taken from Plack::Util.

$class = MyContainer->load_class('Foo');                   # Foo
$class = MyContainer->load_class('Baz', 'Foo::Bar');       # Foo::Bar::Baz
$class = MyContainer->load_class('+XYZ::ZZZ', 'Foo::Bar'); # XYZ::ZZZ

AUTHOR

xaicron <xaicron@cpan.org>

COPYRIGHT

Copyright 2013 - xaicron

LICENSE

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

SEE ALSO

Object::Container.

Plack::Util.