Custom Dependency Injection container is used (see implementation in
PhoneGuitarTab.Core project). It was written a while ago to support aspect-oriented programming via interception. Proxy classes should be built in compile time to support this feature.
Dependency Injection container is created as private variable in
ComponentRoot and it isn't shared anywhere. However, DI container registers itself and it is consumed in
IBootstrapperPlugin classes via property injection. These plugins should register all specific services (e.g. database, file system, diagnostic, etc.) in container and perform initialization logic. It should be avoided to use container
directly in all other cases. Otherwise, it leads to well known antipattern -
All registered dependencies are resolved on demand.
All dependencies are consumed via property or constructor injections.