use move semantics for auto service register constructor