javascript dependency injection framework