Add component registry for dependency injection
Add annotation to confine registry changes
Introduce task delegate and executor
Merge branch 'refactoring/di' into refactoring/domain