## GSOC
-### Next large steps, planned:
-
-For all components that have been discovered, in whatever way, we create a service:
- - that's a catalyst component service
- - which is basically just a constructor injection
- - except the constructor name is COMPONENT
- - and we're "implicitly" passing along some constructor args
- - Lifecycle => Singleton
-
- - Fix B::B so that Service::WithParametrs' parameters attribute has a builder
- - Fix ConstructorInjection so that default parameters are supplied (for accept_context_args)
- - Fix ConstructorInjection's 'suffix' - should be called 'config_key' or something, and
- should be an attribute on the service (as it never changes), rather than a parameter
- to the service
-
- - We make a 'components' sub container in the main container.
- - This gets the ConstructorInjection COMPONENT services, as model_Foo.
- - Lifecycle of these services is Singleton
- - This simplifies the code for MyApp->components, as it need only list one sub-container
-
- - We create a second service (depending on the first one) for ACCEPT_CONTEXT
- - This has a custom service which calls ACCEPT_CONTEXT when the instance is fetched
- - Not Singleton lifecycle
-
- Note - ACCEPT_CONTEXT can be called on app values - if you have a Model::Foo, with an ACCEPT_CONTEXT
- and you call MyApp->model('Foo') then ACCEPT_CONTEXT gets invoked with a $c of 'MyApp' (this is not\
- the normal case, but we need to preserve for compat)
-
### Next steps - less planned:
- Creating service()-like sugar for component
- Using the sugar added in the previous item
- Test when Model::Foo depends_on Model::Bar
+ - Tests for using the container outside of Catalyst
+ - Custom container which adds some (very simple) services which are initialized from
+ the application config file (note plain services, not components)
+ - Depend on (and test) these inside Catalyst
+ - Test loading container outside Catalyst, and these services working
+ - Test Catalyst / MyApp is not loaded
#### Extending my app, notes
### To polish off / t0m review
- - + $class->container->get_sub_container('model')->make_single_default;
- + $class->container->get_sub_container('view')->make_single_default;
-
- get_components_names_types
-
- locate_components
-
- +# FIXME - t0m, how do you feel about this name?
- +# also, do you think I should draw it here, or just return the data structure?
- +sub get_components_names_types {
-
- + MyApp->config->{ 'Plugin::ConfigLoader' }->{ substitutions } = {
-
- +# FIXME - just till I understand how it's supposed to be done
- +# Made this so that COMPONENT is executed once,
- +# and ACCEPT_CONTEXT every call.
- +has instance => (
- + is => 'rw',
-
- # This is ok??
- +my $applevel_config = TestAppContainer->container->resolve(service => 'config')->{applevel_config};
- +__PACKAGE__->config(applevel_config => 'foo');
-
+ locate_components service vs setup_components method
+ - can we be more lazy?
+ - should setup_components be a service that things like the ->component lookup
+ can depend on?
- accept_context_args - where does this come from?
+ - my $accept_context_args = $self->param('accept_context_args');
+ + my $accept_context_args = $params{accept_context_args};
+ ^^ This (may be) wrong! I am thinking the service should be allowed to mangle the
+ accept_context args, no?
+ Without this change, the user could make a custom service which mangled the param, and use
+ Catalyst/IOC/Service/WithAcceptContext.pm, with this change, that module will always see the
+ un-mangled version?? However, without this change, shit doesn't work...
### Known issues
- expand_component_module
+ - People wrapping locate_components in Catalyst.pm