}
}
+=head2 $app->inject_components($MyApp_Component_name => \%args);
+
+Add a component that is injected at setup:
+
+ MyApp->inject_component( 'Model::Foo' => { from_component => 'Common::Foo' } );
+
+Must be called before ->setup. Expects a component name for your
+current application and \%args where
+
+=over 4
+
+=item from_component
+
+The target component being injected into your application
+
+=item roles
+
+An arrayref of L<Moose::Role>s that are applied to your component.
+
+=back
+
+Example
+
+ MyApp->inject_component(
+ 'Model::Foo' => {
+ from_component => 'Common::Model::Foo',
+ roles => ['Role1', 'Role2'],
+ });
+
+=head2 $app->inject_components
+
+Inject a list of components:
+
+ MyApp->inject_components(
+ 'Model::FooOne' => {
+ from_component => 'Common::Model::Foo',
+ roles => ['Role1', 'Role2'],
+ },
+ 'Model::FooTwo' => {
+ from_component => 'Common::Model::Foo',
+ roles => ['Role1', 'Role2'],
+ });
+
+=cut
+
+sub inject_component {
+ my ($app, $name, $args) = @_;
+ die "Component $name exists" if
+ $app->config->{inject_components}->{$name};
+ $app->config->{inject_components}->{$name} = $args;
+}
+
+sub inject_components {
+ my $app = shift;
+ while(@_) {
+ $app->inject_component(shift, shift);
+ }
+}
+
=head2 $c->locate_components( $setup_component_config )
This method is meant to provide a list of component modules that should be
Test::More::ok(my $user = $c->model("User")->find($int));
Test::More::is($c->model("User")->zoo->a, 2);
Test::More::is($c->model("Foo")->role, 'role');
+ Test::More::is($c->model("One")->a, 'one');
+ Test::More::is($c->model("Two")->a, 'two');
$c->res->body("name: $user->{name}, age: $user->{age}");
}
package MyApp;
use Catalyst;
+ MyApp->inject_components(
+ 'Model::One' => { from_component => 'Local::Model::Foo' },
+ 'Model::Two' => { from_component => 'Local::Model::Foo' },
+ );
+
MyApp->config({
inject_components => {
'Controller::Err' => { from_component => 'Local::Controller::Errors' },
'Controller::Err' => { a => 100, b=>200, namespace=>'error' },
'Model::Zoo' => { a => 2 },
'Model::Foo' => { a => 100 },
+ 'Model::One' => { a => 'one' },
+ 'Model::Two' => { a => 'two' },
+
});
MyApp->setup;