I have seen in some projects where I have been part of. The dependency injection is done in the presentation part of the application. That can be the API front or the GUI part like in a ASP.Net web application. The way this is done is to have some interfaces to separate the business from the data layers. Often by having the interfaces for them self in a separate project. Then the presentation layer references the business layer, interfaces and data layer, and connects it all together using dependency injection. This makes it easier to test, and change storage or parts of the application. As the injector can just inject new implementations of the interfaces.
But to me that feels like the presentation layer has two large responsibilities, to present data and connect all the different parts together. What if you needed to change the presentation. Then you would have to implement the injections also. You can't just switch out the presentation or add new ones. What if the old presentation had to live on.
I wanted to build a test solution where I was able to change the presentation, without having to do anything with the injection of the different services. Just start building a new presentation layer. I started by moving the dependency injection to a separate project. Where I put all the injection part of the application. I also added a separation between the presentation layer and all the business layers and data layer. By mapping the business model to view models in the connection project.
What I ended up with was that the presentation layer only hade one reference, and that was to the connector. Making a nice separation from the rest of the application. Every "part" of application can be accessed to using a services in the connector project. The service is responsible for making view models to the presentation layer and taking input form the presentation layer. Then using dependency injection calling the appropriate business layer interface.
I created a simple solution where I hade two services, an article service and an example service. I only implemented the Article service. Just to try to add more presentation layers. And found that added a presentation layer was really nice and easy. I ended up with three, one ASP.Net API, a razor front end and a Blazor front end.
I will go more into the details later in future blog posts
Comments