Move factory interfaces to inner of each model
Use meta class based dependency injection
Merge branch 'refactoring/di' into v3