Что в обычном MVC-приложении, что в новом Core, методы Application_Start и им подобные не являются виртуальными. А в новом Core так и вообще стартовый класс ни от чего не наследуется. Стало быть, эти методы вызываются через рефлексию и имеются соглашения об именах.
Но зачем так сделано? То я бы посмотрел определение базового класса или интерфейса и уже знал бы, какие методы можно переопределить, куда вставить свой код. А тут надо лезть в документацию. Есть какое-то объяснение такому решению?