• nbolt
  • [ 5.0 , 1 ]
login to rate this
.NET BlogEngine 4.0 [non-official]
0 0
  • nbolt
  • [ 5.0 , 1 ]
login to rate this
[.NET7] Design Patterns: Facade in a Web Application
5 0
  • nbolt
  • [ 5.0 , 1 ]
login to rate this
[.NET7] Design Patterns: Repository in a Web Application
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
[.NET7] IP GeoLocation with Dependency Injection and Custom Middleware
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
[.NET7] Weather Forecast with Dependency Injection and Custom Middleware
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
2 ways for creating QR Code using ASP.NET
0 0
  • nbolt
  • [ 5.0 , 1 ]
login to rate this
AMD Ryzen 9 home server with Fedora 41 and .NET 8
15 1
  • ☺️ 1
    ❤️ 2
    🤩 1
    🫠 1
    😁 3
    😅 2
    😆 2
    😉 1
    😊 1
    😗 1
    😘 1
    😚 1
    🙂 1
    🙃 1
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
ASP.NET MVC Routing with @
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
ASP.NET MVC Routing with Constraints
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
BlogEngine.NET 3.3.5 with a BBQ Sauce
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
BlogEngine.NET 3.3.5 with a BBQ Sauce: Part 2
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
EF7 on .NET Core 7 (Preview): Fedora 35 x Windows 11 (41 Million Rows)
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Entity Framework Core 6: Fedora 35 x Windows 11 (41 Million Rows)
0 0
  • nbolt
  • [ 5.0 , 1 ]
login to rate this
Entity Framework Core 7 (Preview): Fedora 35 x Windows 11 (41 Million Rows)
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Entity Framework Providers for the .NET BlogEngine
0 0
  • nbolt
  • [ 5.0 , 1 ]
login to rate this
Enum as String in EF Core
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Facebook: Data Deletion Callback URL in C#
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
How to fix the Could not load file or assembly 'System.IO.Compression' or one of its dependencies exception
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
How to Recover Access to your Account in an ASP.NET Application using the Membership (without decrypting your password)
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Installing and Configuring Jenkins with GIT to Build and Deploy Your .NET Application
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Installing and Configuring Jenkins with SVN to Build and Deploy Your .NET Application
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
IP GeoLocation with Unity and Dependency Injection
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
NHibernate Providers for the .NET BlogEngine
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
No mercy for the ORMs: Load and Performance Test on EF Core, NHibernate and pure ADO.NET (41M rows)
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Resizing images on a Controller Method in ASP.NET Core (.NET 6)
0 0
  • 🔥 1
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Streaming Video Files in ASP.NET MVC
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Testing your MVC App on XSP/mono in Fedora (before deploying to Apache)
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
Weather with Unity and Dependency Injection
0 0
  • nbolt
  • [ 5.0 , 1 ]
login to rate this
[.NET7] Design Patterns: Facade in a Web Application
5 0

Hi Folks! In this post I will show you how one of my favorite design patterns work: the facade design pattern. The theory behind them is always more complicated than it actually seems: the facade is meant to reduce the complexity when dealing with other objects. In the sample application, based on the IP GeoLocation with Dependency Injection and Custom Middleware application, we can notice the source-code manipulating the session object directly, which is kinda dangerous (the boxing and unboxing alone can be pretty messy).

Before running the application, you need to register yourself on IpInfoDb to get an API Key.

Aftet that, you need to replace "INSERT YOUR KEY HERE" string inside the Program.cs file in the Location project.

So what if we create a facade class to hold the Location object, save/retrieve the object from the data-source and choose where to store the information, including all the necessary dependency injections for it? But first, let's clone the github repository and checkout a branch called designpattern-facade!

Clone the repository from github here.

But do not forget to branch out to designpattern-facade, otherwise you will not be able to see the right code.

Open the NET7-IPGeolocation.sln solution file and browse to a file called IUserFacade inside the Location website. You will notice that the interface declares a property called Location, from the Services.Location.LocationModel type. The implementation of that interface is done by the Facades/UserFacade class, which is sweetly added in the IOC container in the Program.cs file.

If we decide to change the implementation, we can easily create a new class, implement the interface and change the reference in the Program.cs file.

Now let's take a look at the Facades/UserFacade class. Browse to that directory inside the Location website. In the constructor, there's 2 parameters: one for the memory cache and another one to grant access to the HttpContext object (I need the Session ID to compose a location key - where to store the information in the cache of the application, basically).

But before you run the application, you need to register yourself in the IpInfoDb website to get an API key. Once you do that, replace the "INSERT YOUR KEY HERE" inside the Program.cs file. You should see an output like that:

I would say the Facade design pattern is one of the most useful, because we have to deal with Cache and Session objects all the time. So it helps us organize the source-code of our applications, its benefits are huge.

Hope you guys enjoyed it. See ya!

what to see next
  • nbolt
  • [ 5.0 , 1 ]
login to rate this
[.NET7] Design Patterns: Repository in a Web Application
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
[.NET7] IP GeoLocation with Dependency Injection and Custom Middleware
0 0
  • nbolt
  • [ 0.0 , 0 ]
login to rate this
[.NET7] Weather Forecast with Dependency Injection and Custom Middleware
0 0
4/9/2026 12:12:56 AM
rating: 5
comment section
place your comment here, but login first
be the first to comment
An error has occurred . This application may no longer respond until reloaded . An unhandled exception has occurred . See browser dev tools for details . Reload 🗙