Silva scored 139 as the tourists reached 375-5 by stumps at the Sher-e-Bangla stadium, a lead of 143 over Bangladesh's first innings total of 232 with five wickets in hand.
The right-hander put on 118 for the first wicket with Dimuth Karunaratne (53) and then teamed up with veteran Kumar Sangakkara (75) to add a further 155 runs for the second wicket.
Sri Lanka will resume on Wednesday looking to grab a really sizeable lead and have the hosts on the ropes in the first match of the two-Test series.
Left-arm spinner Shakib Al Hasan was the pick of the bowlers with three for 94, including the vital wicket of Silva.
Also Read
Sri Lanka, who started the day on 60-0, had moved to 118 when left-hander Karunaratne was snapped up at short cover off Shakib just before lunch.
After a barren post-lunch period, Bangladesh removed Silva and Sangakkara in quick succession in the final session. They claimed two more wickets as Sri Lanka slipped from a comfortable 273-1 to 375-5.