Skip to main content

๐Ÿš€Master User Authentication in .NET 8 Web API Email Confirmation, Password Reset, 2FA & Lockout with JWT & Identity๐Ÿ”

Say Goodbye to DI Hassles๐Ÿ™‹‍♂️, Hello .NET 8 Enhancements๐Ÿ‘‹! Master Multiple Service Implementations Like a Pro!๐ŸŒŸ๐Ÿ”ฅ

We're diving into the exciting new features introduced in .NET 8 that significantly enhance Dependency Injection (DI). If you've been following along, you know that DI is a cornerstone of building maintainable and testable applications. With .NET 8, Microsoft has introduced several enhancements that make DI even more flexible and easier to manage, especially when dealing with multiple service implementations in your Web API projects.


# Follow Up

Imagine you're developing a Web API for an e-commerce platform. You have various payment processing services to integrate, such as PayPal, Stripe, and Square. Each service has its own implementation, and you need to switch between them based on the client's choice or other business logic. Before .NET 8, managing these multiple implementations often required a lot of boilerplate code and could become quite cumbersome.


Now, with .NET 8, Microsoft has introduced some fantastic new features to streamline this process. One of the key improvements is the ability to easily configure and manage multiple service implementations. This means you can effortlessly switch between different services without writing a lot of repetitive code, making your codebase cleaner and more maintainable.


# Create Interface and Service Implementations

 public interface IRead
 {
     Task<IEnumerable<WeatherForecast>> GetForecastAsync();
 }

 public class ReadFromLocal : IRead
 {
     public async Task<IEnumerable<WeatherForecast>> GetForecastAsync()
     {
         await Task.Delay(TimeSpan.FromSeconds(2));
         string[] Summaries = ["Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"];
         return Enumerable.Range(1, 10).Select(index => new WeatherForecast
         {
             Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
             TemperatureC = Random.Shared.Next(-20, 55),
             Summary = Summaries[Random.Shared.Next(Summaries.Length)]
         })
         .ToArray();
     }
 }

 public class ReadFromExternal(HttpClient httpClient) : IRead
 {
     public async Task<IEnumerable<WeatherForecast>> GetForecastAsync()
     {
         await Task.Delay(4000);
         var weatherData = await httpClient
               .GetFromJsonAsync<IEnumerable<WeatherForecast>>("https://localhost:7198/weatherforecast");
         return weatherData!;
     }
 

# Create Dependency Injection using Keyed

builder.Services.AddKeyedScoped<IRead, ReadFromLocal>("LocalRead");
builder.Services.AddKeyedScoped<IRead, ReadFromExternal>("ExternalRead");

# Use the Various Service in Controller

[ApiController]
[Route("[controller]")]
public class WeatherForecastOption1Controller(
    [FromKeyedServices("LocalRead")] IRead readLocal,
    [FromKeyedServices("ExternalRead")] IRead readExternal) : ControllerBase
{

    [HttpGet("Local")]
    public async Task<ActionResult<IEnumerable<WeatherForecast>>> Local()
    {
        return Ok(await readLocal.GetForecastAsync());
    }

    [HttpGet("External")]
    public async Task<ActionResult<IEnumerable<WeatherForecast>>> External()
    {
        return Ok(await readExternal.GetForecastAsync());
    }
}


# Conclusion

We've explored the powerful new features in .NET 8 that enhance Dependency Injection, making it more flexible and easier to manage multiple service implementations in your Web API projects. By leveraging these improvements, you can streamline your code, reduce boilerplate, and focus on building robust and scalable applications.


# Here's a follow-up section to encourage engagement and support for Netcode-Hub:

๐ŸŒŸ Get in touch with Netcode-Hub! ๐Ÿ“ซ

1. GitHub: [Explore Repositories] ๐ŸŒ

2. Twitter: [Stay Updated] ๐Ÿฆ

3. Facebook: [Connect Here]๐Ÿ“˜

4. LinkedIn: [Professional Network]๐Ÿ”—

5. Email: [business.netcodehub@gmail.com] ๐Ÿ“ง

# ☕️ If you've found value in Netcode-Hub's work, consider supporting the channel with a coffee!

1. Buy Me a Coffee: [Support Netcode-Hub] ☕️


Comments

Popular Posts

Complete Employee Management System | .NET 8 Blazor Wasm & Web API - Perform CRUD, Print, PDF etc..

.NET 8 Clean Architecture with Blazor CRUD, JWT & Role Authorization using Identity & Refresh Token๐Ÿ”ฅ

Employee Management System | .NET 8 Blazor Wasm- Profile & real-time data retrieval. Update 1