singleton with di