Is your feature request related to a problem? Please describe.
A lot of public methods operate in terms of concrete data structure impelemntations. It could be lead to focus on specific implementation in our logic. In addition, such code is harder to improve and refactor.
Describe the solution you'd like
Replace all concrete data structure implementations with interfaces. I.e. List<T> you could replace with IReadOnlyList<T>, Dictionary<T> -> IReadOnlyDictionary<T> and so on.
Describe alternatives you've considered
None.
Additional context
Be sure that this changes do not break serialization of DTO or other code contracts.