---
name: "CatalystX::InjectComponent"
section: "3pm"
platform: "linux"
package: "libcatalystx-injectcomponent-perl"
version: "0.025-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/CatalystX::InjectComponent"
---

# CatalystX::InjectComponent(3pm)

Inject components into your Catalyst application

## 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.
