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.