Переменную можно добавить в контекст класса сразу из аргумента конструктора, так как в языке программирования, который вы используете, существует возможность создания конструктора, который принимает аргументы и инициализирует переменные класса при создании экземпляра объекта.
В данном коде вряд ли возможно обращаться к переменной "userService" из других методов до добавления ее в контекст класса, однако возможно, что вам кажется, что это возможно из-за того, что IDE, которую вы используете, предоставляет автодополнение и помощь при написании кода.
Ключевое слово "readonly" добавляет функционал, который делает переменную доступной только для чтения после инициализации в конструкторе и предотвращает дальнейшее изменение ее значения. Это делает код более безопасным и понятным, так как другие разработчики (и сам разработчик) могут быть уверены, что значение переменной не будет изменено ненамеренно.
"readonly" действительно должно использоваться только для декларации полей класса, но это не означает, что после этого поле нельзя использовать в других методах. Все методы класса могут обращаться к этому полю, но не имеют возможности изменять его значение.