what if
our ninja need to switch weapon dynamically
https://di-processor.firebaseapp.com/ninja-di
Slide 17
Slide 17 text
what if
our ninja need to switch weapon dynamically
https://di-processor.firebaseapp.com/ninja-di
nunchakus, dart, stick, sword
Slide 18
Slide 18 text
Processor Pattern
using injection token & multi-provider
Slide 19
Slide 19 text
weapon interface
name, draw(), animate()
Inject into NinjaComponent as
weapon[ ]
injection token
processors
multi-providers
Slide 20
Slide 20 text
Injection Token + Processor Interface
Slide 21
Slide 21 text
Processor
implement the interface
Slide 22
Slide 22 text
Multiple providers with same token
one token multiple implementations
set as multi
Slide 23
Slide 23 text
Inject multiple providers
Injection 4 processors
get one processor
Invoke processor functions
Slide 24
Slide 24 text
Production Use Case: Chart Processors
Slide 25
Slide 25 text
- chart type
- title / menu
- processing logic
- labels & tooltips
Differences
- they are all charts
- same interface:-
- processData()
- name, title, etc
Similar
https://di-processor.firebaseapp.com
Slide 26
Slide 26 text
YYYY-MM
what users want to see
YYYY-MM-DD
what backend returns
Frontend developer
Slide 27
Slide 27 text
what your chart library wants
what you need to do
• transform data (loop & group it by year month)
• sort it
• generate chart configuration
Slide 28
Slide 28 text
What you actually do - Chart Processor
https://github.com/chybie/di-processor/blob/master/src/app/chart-di/services/chart-new-starter-processor.service.ts
private
Slide 29
Slide 29 text
Injection Token + Processor Interface
Slide 30
Slide 30 text
Multiple providers with same token
Slide 31
Slide 31 text
Dashboard Component
Slide 32
Slide 32 text
Other useful scenario
• Data table processors
• Search processors
https://stackoverflow.com/questions/48382323/angular-lookup-all-
providers-implementing-a-specific-interface/
48383858#comment83773434_48383858