Explain ConfigureServices and Configure method in ASP.NET ?
Last Updated : 22 Mar, 2022
In this article, we will see what is Configure and ConfigureService methods. Basically, these two methods play a very important role in startup class. The baseline of this class is to reduce the dependency of the application on the server. Actually, The Startup class is required to define two methods that will be invoked automatically by ASP.NET Core. They are the ConfigureServices method and the Configure method.
In the Startup class, we actually do two things:
Configure Service(): It is used to add services to the container and configure those services. basically, service is a component that is intended for common consumption in the application. There is framework service like MVC, EF core, identity so on. but there are also application services that are application-specific like send mail services.
Configure(): it is used to specify how the asp.net core application will respond to individual requests. Through this, we actually build the HTTP request pipeline
Example: Open the program.cs file. As you can see the code:
In the main function, a host is set up, which will configure a server and a request processing pipeline.
We are calling the CreateHostBuilder, which will set up an application with some defaults using the Host.CreateDefaultBuilder().
In the Main, we will call the CreateHostBuilder, and in there a host will be created that will then run our application. You can see that we are first going to call on the host the CreateDefaultBuilder method. The CreateDefaultBuilder method will set up a host builder with quite some defaults already. the new web host will be configured again with defaults.
Another very important thing that is happening here is that we are specifying the Startup class using the UseStartup method. We are passing as a type the Startup class i.e UseStartup<Startup>, which will be the type that actually performs the configuration of the application.
Startup.cs: Let's take a look at the Startup class. as we see the ConfigureServices and the Configure method.
In the ConfigureServices method:
In the ConfigureServices method, which will be called first, we will be registering our services for the application
As you can see, in the above code snippet initially there is no code in ConfigureService but regardless of that, those built-in services are already available for injection so all the services we can add in this method and inject into other pieces of code.
This container is available through the IServiceProvider interface, and the service collection you see here is the collection of services that it manages. So we can, in the ConfigureServices method, add the services to the collection of managed services in the application. Services are objects with fixed functionality for other parts of the application
In there, we need to add all the services that we will be using inside of our application. Those can be built-in services, as well as our own services. This is the place where we will be registering all dependencies with the dependency injection system built-in to ASP.NET Core.
In the Configure method:
This one is called after configuring service method because it uses services that are registered and configured in configureServices method
The HTTP request pipeline will be configured. There are some defaults in here as you can see, and notice that the first line is going to use an environment check. Using dependency injection, this method will receive a WebHostEnvironment instance, and on that, we are going to check the environment.
The env.IsDevelopment This signifies that this developer-friendly exception page middleware will only be added when we are running in a development environment. The developerExceptionPage middleware is not something we want to allow everyone to see. we want stack traces of exception only during the development app.UseDeveloperExceptionPage statement configures the request pipeline by adding the developerExceptionPage middleware to it so now when an exception is thrown, the piece of code which you see in the code snippet will handle it.
Now I am going to add another piece of code that handles exceptions that do not belong to the development environment. The useExceptionHandler middleware catches the exception, logs them, and then re-executes the request. This will not show us a developer-friendly exception page and stack trace won't be exposed. Now you can check by changing the environment variable.
well, come to next UseRouting and UseEnpoints.it is actually responsible to give the response as an output when a request was sent to the application was going to respond by sending to response a string saying 'Hello world' so the used routing and endpoints middlewares basically enable the MVC to respond to an incoming request it needs to map incoming requests with the correct code that will execute
Let's see now, how to decorate the services in startup.cs file.Create a simple project,
In this project, I will not be going to explain or define each and every step. In which we are going to focus on only startup.cs file
So Let's get started:
Step 1: create a new asp.net core web application project and select template MVC
Step 2: Create Model class under model folder i.e ToDoModel
Step 3: Create Class ApplicationDbContext | Inherits DbContext class | Add Constructor | Add model class to ApplicationDbContext
Note : In this demo, I am going to use InMemory database with Entity Framework Core. So you have to install the nuget package of it i.e Microsoft.EntityFrameworkCore.InMemory.
Step 4: Now let's register the services in the ConfigureServices method,
call AddMvc() to add support for MVC middleware.
call AddDbContext<> with the argument of .UseInMemoryDatabase("ToDoList") to configure EntityFramework to the DbContext class.
Step 5: In the Configure method, remove existing code entirely and replace it with a call to app.UseRouting() and after UseRouting add a call to app.UseEndpoints().
UseRouting: This Middleware component is used to route requests.
UseEndpoints: This middleware component will enable routing the request to the correct endpoint in the application.
Step 6: In the Configure method before UseRouting, checks the environment if env is set to Development using the IsDevelopment() method
If Yes, it should call app.UseDeveloperExceptionPage() to get stack trace of error pages.
Otherwise, it should call app.UseExceptionHandler() and pass it the argument "/Home/Error"
UseDeveloperExceptionPage: This will enable the use of the developer exception page in my application, so that will get useful information during development.
UseExceptionHandler: This middleware component is used to enable to addition of custom user-friendly error messages.
Step 07: Create controller HomeController | Add action methods i.e Index and Error |
Step 08: In the shared folder create generic error view and also for add view to index method | On that index view add link of ToDoList
Error action method View :
Index action method of Homecontroller view :
Step 9: Create one more controller | create field of type ApplicationDbContext. | Create constructor and set the value to the parameter passed to constructor | Create action methods for list | Get Create | Post Create and based on it add views
Let's a quick highlight some points article. The application starts with the call to the main function in the Startup class. Then, we specified which was our Startup class using the startup call. In the Startup class, first, ConfigureServices is called, allowing us to register services that we'll want to use in our application. Then, the Configure method is called where the request pipeline is set up. After all that, our application is up and running and is ready to handle incoming requests.
That is all about Configure and ConfigureService Methods.