Если Вы хотите, чтобы экземпляры Ваших классов создавались при старте приложения и оставались доступными всё время его работы, Вам надо либо сделать их статическими полями какого-либо класса, либо использовать паттерн Синглтон (ни разу не антипаттерн при правильном использовании), либо, как Вам говорили выше,использовать Dependency Injection, почитать про него можно, например, здесь:
https://docs.microsoft.com/ru-ru/aspnet/core/funda...
Почему, вообще, происходит то, что Вы описали. Класс Startup создается при старте приложения и используется только для его конфигурации, то есть, он не живёт всё время работы Вашего приложения, а следовательно, все объекты, являющиеся его полями, уничтожаются сборщиком мусора, если не передать владение ими другому объекту, имеющему большее время жизни. Вы же, как я понял, просто создаете эти объекты в методе, в этом случае, опять же, если не передать владение, они станут недоступными сразу после завершения метода и весьма быстро соберутся сборщиком мусора.