Problem when using cargo patch

hi ,dear rust big hands:
my program use crate A ,crate A use crate B ,crate B use crate C, now crate C have some problem,I download crate C src,and fix it in local dir.I want to A refer B, B refer my local C .
So I do this in my cargo.toml

CrateC = {version ="4.2.2",default-features = false}

[patch.crates-io]
CrateC = {path = "/root/chen/rustwork/local_crateC",version ="4.2.2",default-features = false}
But when cargo build ,I found infact B still use crate,io Crate C.
I check the cargo.lock ,I found if my program direct use some crate ,and patch will work well.but if use indirctly,it will not work.
It seems like I cannot control the crate dependency

Now I do it in a stupid way ,download crate ABC src ,change the cargo.toml to all local. But when someday I meet this problem in big leveal crate ABCDED....。how to do it in a elegant way 。
My problem maybe stupid,forgive me.
Best whishes for your reading
love you

remove Chinese and Wait for anyone reply :rofl:

thank you all the same ,my bro