basic dependency injection framework