NAME

CatalystX::InjectComponent - Inject components into your Catalyst application

VERSION

version 0.025

SYNOPSIS

package My::App;

use Catalyst::Runtime '5.80';

use Moose;
BEGIN { extends qw/Catalyst/ }

...

after 'setup_components' => sub {
    my $class = shift;
    CatalystX::InjectComponent->inject( into => $class, component => 'MyModel' );
    if ( $class->config->{ ... ) {
        CatalystX::InjectComponent->inject( into => $class, component => 'MyRootV2', as => 'Controller::Root' );
    }
    else {
        CatalystX::InjectComponent->inject( into => $class, component => 'MyRootV1', as => 'Root' ); # Controller:: will be automatically prefixed
    }
};

DESCRIPTION

CatalystX::InjectComponent will inject Controller, Model, and View components into your Catalyst application at setup (run)time. It does this by creating a new package on-the-fly, having that package extend the given component, and then having Catalyst setup the new component (via ->setup_component)

So, how do I use this thing?

You should inject your components when appropriate, typically after setup_compenents runs

If you're using the Moose version of Catalyst, then you can use the following technique:

use Moose;
BEGIN { extends qw/Catalyst/ }

after 'setup_components' => sub {
    my $class = shift;

    CatalystX::InjectComponent->inject( into => $class, ... )
};

METHODS

CatalystX::InjectComponent->inject( ... )

into        The Catalyst package to inject into (e.g. My::App)
component   The component package to inject
as          An optional moniker to use as the package name for the derived component 

For example:

->inject( into => My::App, component => Other::App::Controller::Apple )
    
    The above will create 'My::App::Controller::Other::App::Controller::Apple'

->inject( into => My::App, component => Other::App::Controller::Apple, as => Apple )

    The above will create 'My::App::Controller::Apple'

ACKNOWLEDGEMENTS

Inspired by Catalyst::Plugin::AutoCRUD

AUTHOR

Robert Krimen <robertkrimen@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Robert Krimen.

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