So I have a service which is injected in my controller via dependency injection
Come descritto, sembra una cosa strana da fare. Il Controller dovrebbe avere accesso a un Modello, idealmente tramite iniezione come si sta facendo. Quel modello potrebbe utilizzare un servizio, ma il controllore non dovrebbe accedere direttamente a un servizio.
Il controller chiama alcuni aspetti del modello, SomeModel.DoSomething()
. Quindi interrogherà il modello per ottenere lo stato corrente, costruendo un oggetto con valore semplice, ViewModel, che poi passerà alla vista.
Certo, sto leggendo molto in una sola frase. È possibile che questo "servizio" sia il tuo modello.
I feel like the setter way would be the most maintainable. However, I don't want to pollute the ViweModel. I'm not sure if I am breaking any best practices here.
L'unico scopo di ViewModel è quello di esporre semplicemente i dati necessari alla vista. In che modo questo è davvero solo un dettaglio di implementazione. Fintanto che espone solo i dati necessari tramite proprietà di sola lettura, si adatta al brief di un ViewModel. Se il modo più semplice per farlo è iniettare il Modello (o il servizio nel tuo caso) in esso e lasciarlo elaborare per ottenere i dati, quindi personalmente non vedo alcun problema.