add interface and trait for DI