POC: Better DI for Jetbrains Plugin
<!--IssueSummary start-->
<details>
<summary>
Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards.
</summary>
- [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=442315)
</details>
<!--IssueSummary end-->
The Jetbrains extension currently has a Dependency Injection (DI) solution, however that is extremely limited. There are two ways of registering services. Either via attribute (where the service will be picked up at startup via reflection) or in the configuration xml. By attribute you cannot inject a service based upon it's interface. We can inject by interface if we use the config, but we cannot register multiple interfaces to resolve to the same instance of a service. The lifetime of a service is bound by either the lifetime of the application or the project (currently we mostly use project)
The purpose of this issue is to investigate whether we can use a better DI solution for Jetbrains that will make testing much easier.
issue