P_sequencer is null_object in sequence's new function

I’m trying to use p_sequencer in my sequence’s new function, but I got a Null Object Access error.
I’m certain that the virtual sequencer has been newed already.
So I checked the `uvm_declare_p_sequencer macro source code and found out it’s just a void function m_set_p_sequencer.
My question is, when does this function gets called and really assign the handle?
Is there anyway I can access p_sequencer before the pre_start function?

In reply to ahhhsa:

I recommend never using p_sequencer. You should only use a parameterized uvm_sequencer and never extend uvm_sequencer. You should add all required variables/sequencer handles to the sequence.