added reflection, constructor args, and automatic service injection