I have a PersonEditViewModel which needs two other objects, the personId and the PersonRepository. PersonRepository is obtained from a service locator:private final int personId;public PersonEditViewModel(int id) {    this.personId = id;    this.personRepository = ServiceLocator.get(PersonRepository.class);}But I would like to use dependency injection (DI, IoC) to obtain PersonRepository, preferably via constructor:public PersonEditViewModel(PersonRepository pr) {    this.personRepository = pr;}My problem is, how can I pass the personId to the constructor in DI pattern? Do I have to make a setter for id - then DI changes the logic of the PersonEditViewModel (the personId field cannot be final)? Is it insufficiency of DI pattern that I cannot pass data objects to the constructor, or do I have to switch my mind and design my ViewModels other way, probably use other patterns to pass data objects to them?Edit: Changed my question using personId and PersonRepository to be closer to common situations. 
Dependency injection of ViewModel with unmanaged parameter
java;dependency injection