P_sequencer is null for the override sequence

I have a sequence name as empty_reg_seq extended from uvm_sequence, only one empty task of write_reg was included in this sequence.
There is a sequence name as func_seq extended from uvm_sequence, it will include many tasks, and empty_reg_seq was created in it’s body task, the empty_reg_seq will be called in this func_seq.
I have a sequence name as my_reg_seq, extend from empty_reg_seq, it will rewrite the write_reg task and start sequence with uvm_do_on(my_seq, p_sequencer.my_sqr1); In this my_reg_seq, I have added the uvm_declare_p_sequencer(my_vsqr).
And in my env, I have created virtual sequencer my_vsqr in build_phase, and connect it to a real agent sequencer in connect_phase.
In my test, I use set_type_override_by_type(empty_reg_seq::get_type(), my_reg_seq::get_type()) to override empty_reg_seq with my_reg_seq in build phase.
From the Factory Configuration log, I can see following message:

Type Overrides:
 Requested Type  Override Type
------------------------------
 empty_reg_seq    my_reg_seq

So, it seems that the override is fine. But I have the Error for the p_sequencer started inside my_reg_seq during the simulation.
The p_sequencer is null in simulation log, there is “Error-[NOA] Null object access” for the line of the `uvm_do_on in my_reg_seq write_reg task.