Redesign factory services #40
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Breaking change: All
ProvideFactory*functions(andServiceFatory*structs) now accept 2 type parameters along with factory parameters, the first one must always be explicitly passed. Their combinations may fall into 2 categoriespal.ProvideFactory1[Pinger](func(_ context.Context, url string) (*pinger, error) {...}). In this case the returned value(*pinger) must implement the interface(Pinger).pal.ProvideFactory1[*pinger](func(_ context.Context, url string) (*pinger, error) {...})This is validated in runtime during initialization. The factory function must always return a pointer to a concrete type.
This is done to let pal inspect dependencies of services created by factory functions and build the correct dependency tree.
The actual changes to the dependency tree to embrace these changes will come in a follow up pr.