NAME

Bolts::Blueprint - Defines the interface implemented by blueprints

VERSION

version 0.143171

SYNOPSIS

    package MyApp::Blueprint::Custom;
    use Moose;

    with 'Bolts::Blueprint';

    has service_locator => (
        is         => 'ro',
        isa        => 'MyApp::ServiceLocator',
    );

    sub builder {
        my ($self, $bag, $name, @params) = @_;
        $self->service_locator($name, @params);   
    }

DESCRIPTION

A blueprint is a class for retrieving a fresh instance of a value or object on behalf of an artifact.

REQUIRED METHODS

builder

    sub builder {
        my ($self, $bag, $name, @params) = @_;
        ...
    }

This method must be implemented to perform the actual object construction. The arguments passed are as follows:

$self

This is the invocant, the blueprint object itself.

$bag

This is the bag that contains the artifact being constructed. This is often referenced as an object giving context to the construction.

$name

This is the name of the artifact being constructed. This is also given for context.

@params

These are the parameters passed in during the pre-injection phase. This may be a list of parameters or hash or whatever the injectors say should be passed in.

METHODS

get

    my $artifact = $blueprint->get($bag, $name, @params);

This is basically a wrapper around the call to "builder".

implied_scope

    my $is_implied = $blueprint->implied_scope;

Sometimes, the blueprint itself is inherently scoped. For example, a literal value is immutable and therefore saving the value to the scope would be a waste of time. Another example is a service locator that might manage it's own scope based on complex features of the application state. In those cases, you may override this method to return a true value to cause the artifact to skip saving to and checking the scope for this value and calling the blueprint every time.

AUTHOR

Andrew Sterling Hanenkamp <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Qubling Software LLC.

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