I hit another roadblock recently with global readonly data and dependency injection. For example if I have a list of currencies/their amounts that I would need to be able to read from anywhere, but only allow a class CurrencyManager to actually modify the list, how would I go about that without turning CurrencyManager into a singleton with a public get, private set field?
Most of my project is already setup with scriptable objects for event channels and referencing default data. I considered using runtime sets and modular data via SOs as shown in the 2017 Unite talk and adding references to the SOs on any components that may need that data, but I thought scriptable objects were meant to be used as data containers that don't change at runtime? Do I just have to manage the values on the SOs at initialization and then save/load their state along with other game data?