Extension Method to split services registrations – Dependency Injection – .NET CORE PART III

Hi! This is part three of the dependency injection series, if you want to see the previous articles, just check:

Problem – a lot of services 🙁

If you can remember, we only have 3 services in our app:

If we have only a few services, we don’t have any problem but can you imagine if we have a lot of services? Our ConfigureServices would be huge and maintenance issues can appear.
Let me show you:

We will add ten services more – Interface + Concrete Service and then, we’ll register each service in the configureServices method.

We add 10 services more
A lot of services 🙁

Ok, you can see it, we have a lot of services. In this case, we have ten services but in a real application, we would be able to have more than thirty 😮
Maybe, we need to evaluate splitting our services into separate files because our main principle is: keep the configureServices method as short and clear as possible.

Applying Extension Methods to split our services registrations – Hello clean code 😀

Ok, our first step will be to create an “Infraestructure” folder and then, we’ll create two classes inside it:

  1. SchoolServiceCollection : we will put here all services are related to school.
  2. FakeServiceCollection we will put here all fake services.

Ok, let’s started 😉

1 – Creating an extension class: Name + “ServiceCollection” (naming convention)

2 – Set class as Static class and changing the namespace to Microsoft.Extensions.DependencyInjection

3 – Add our extension method

We are extending IServiceCollection and also, we need to return the IServiceCollection because of the service registration implements the CHAIN PATTERN.

4 – Add our service registrations

5 – Finally we need to call our extension method in the configureServices Method

Perfect, we need to do the same with FakeServices, let’s code:

Finally, we need to call this method in the configurationServices method and remove old registrations:

Magic 🙂 we can split our services registrations accord several criteria for instead, we can have:

  • ConfigurationServices ==> methods that retrieve information from a specifying config section
  • BusinessServices ==> All business service registrations
  • RepositoryServices ==> All repository service registrations
  • Split by modules for example: AddMembershipServices() – AddCatching() – AddAuditing() – etc.

In other words, you can split the service registrations whatever you want according to your business 😉

That’s all !

Big hug 😉

Code on my github 😉