Castro stroomde in het seizoen 2004 door vanuit de jeugdopleiding van Bayer 04 Leverkusen. Daar werd hij al gauw basisspeler. Tot het seizoen 2012/13 was hij voornamelijk verdediger. Toen Daniel Schwaab zijn plek achterin overnam, verschoof hij naar het middenveld. Daar speelt hij tot de dag van vandaag. Hij kwam bij Bayer Leverkusen elf seizoenen tot 368 wedstrijden, waarin hij dertig goals scoorde.
Castro tekende in mei 2015 een contract van juli 2015 tot medio 2019 bij Borussia Dortmund.[1] Dat betaalde een gelimiteerde transfersom van €11.000.000,- voor hem aan Bayer Leverkusen.[2] Hij verlengde zijn verbintenis in maart 2017 tot medio 2020. In het seizoen 2016/17 pakte hij met Borussia Dortmund de beker. Nadat het in de halve finale Bayern München had uitgeschakeld, versloeg het in de finale Eintracht Frankfurt.