Explain Routing, Snapshot and DI in Angular?