Public Sector

We've had the pleasure of working with UK and overseas central and local government departments, including Healthcare (NHS and Foundation Trusts), Defence, Education (Universities and colleges), many of the main Civil Service departments, Emergency Services; also public-owned corporations including the BBC, Bank of England, Ordnance Survey, and regulatory bodies such as Ofgem.

We are registered on Crown Commercial Service’s (CCS) Dynamic Purchasing System (RM6219 Training and Learning) and also with numerous tender portals such as Ariba, Coupa and Delta E-Sourcing.

Read more...

Graduate Training Schemes

Framework Training has a strong track record of providing a solid introduction into the working world for technical graduates across myriad industries. We provide the opportunity to learn and gain valuable hands-on experience in a supportive, friendly and sociable training environment.

Attract & retain the brightest new starters

We know it is vital for our clients to invest in the future of their talented grads; not only to provide them with high-quality, professional training essential for their roles, but to embed them within the organisation’s culture and guide them on the right path to a successful career.

After all, your new hires could well be the next leaders and their creative ideas and unique insights are invaluable to your business.

Read more ...

Learning & Development

Our unique portfolio of high-quality technical courses and training programmes are industry-respected. They’re carefully designed so that delegates can seamlessly apply what they’ve learnt back in the workplace. Our team of domain experts, trainers, and support teams know our field — and all things tech — inside out, and we work hard to keep ourselves up to speed with the latest innovations. 

We’re proud to develop and deliver innovative learning solutions that actually work and make a tangible difference to your people and your business, driving through positive lasting change. Our training courses and programmes are human-centred. Everything we do is underpinned by our commitment to continuous improvement and learning and generally making things much better.

Read more...

Corporate & Volume Pricing

Whether you are looking to book multiple places on public scheduled courses (attended remotely or in our training centres in London) or planning private courses for a team within your organisation, we will be happy to discuss preferential pricing which maximise your staff education budget.

Enquire today about:

  • Training programme pricing models  

  • Multi-course voucher schemes

Read more...

Custom Learning Paths

We understand that your team training needs don't always fit into a "one size fits all" mould, and we're very happy to explore ways in which we can tailor a bespoke learning path to fit your learning needs.

Find out about how we can customise everything from short overviews, intensive workshops, and wider training programmes that give you coverage of the most relevant topics based on what your staff need to excel in their roles.

Read more...

.NET Aspire – Orchestrating Applications

Discover how .NET Aspire simplifies microservices orchestration, logging, and deployment in .NET 8 and 9. Learn to build and manage cloud-native apps using C#, Blazor, Redis, and Docker with ease.

April 24th, 2025

With the rise of cloud computing, software applications have increasingly become less monolithic. 

Even the simplest web application may consist of a Web API backend and a frontend written in MVC, Blazor or some other technology. With microservices and third-party Docker images such as Postgres or Redis, complexity increases.

Developers want to focus on functionality but are increasingly distracted by configuring the interaction of all these component parts, and then configuring them again for deployment.

Introduced as part of .NET 8 and continuing on in .NET 9, Aspire offers an all-in-one solution for these problems, and more besides.

Getting Started

The easiest way to get going with Aspire is to use the .NET Aspire Starter App template, which is available through Visual Studio:

Streamline Microservice Development with .NET Aspire in .NET 8

Alternatively, it can be created from the command prompt:

dotnet new aspire-starter --use-redis-cache --output [ProjectName]

The generated solution contains five projects. Three of them are straightforward: a Web API backend, a Blazor frontend and an xUnit test project. Additionally, there are two projects related to Aspire: AppHost and ServiceDefaults.

(Note, if you have an existing project, you can configure it for Aspire via Add ➤ .NET Aspire Orchestrator Support.)

Running Locally

Traditionally, to run a backend and a frontend in Visual Studio, you would need to configure multiple startup projects. Now, you just need to run the AppHost application – which defaults as the startup project. You won’t see your application immediately, instead you’ll get the Aspire dashboard:

Streamline Microservice Development with .NET Aspire in .NET 8

Here you can see your two applications, plus a Docker container for a Redis cache. (You will need to have Docker Desktop or an equivalent for this feature to work.)

Click on the frontend endpoint to see the Blazor app and navigate to Weather to verify that data is coming from the backend.

Streamline Microservice Development with .NET Aspire in .NET 8

To see the API, click on the apiservice endpoint. (Since .NET 9, Swagger is no longer included automatically in API applications, so you will have to navigate to /weatherforecast to see the data. You can easily add Swagger manually if you want.)

Analytics

On the Aspire dashboard, you’ll also see links for Console logs, Structured logs, Traces and Metrics. Here you can see in one place logging information from your two applications and from the Redis cache. There’s no longer any need to keep track of multiple consoles with the logs for your separate applications.

Streamline Microservice Development with .NET Aspire in .NET 8

Containers

When developing, your applications are not run as Docker containers, although they can be on deployment. However, there is a wide selection of container images which you can use as part of your application – Redis is just one example included to demonstrate the feature.

Additional containers can be found by right-clicking on the AppHost project and choosing via Add ➤ .NET Aspire Package…

Streamline Microservice Development with .NET Aspire in .NET 8

These are simply a subset of NuGet packages, each beginning with ‘Aspire.’ By selecting one you can add it to your application in just the same way that Redis is already included.

Not all published Docker images are available via NuGet, but it’s relatively easy to include a raw image into your application with a bit of additional code. 

Under the Hood

The main configuration of the application is done in Program.cs in the AppHost project.

Streamline Microservice Development with .NET Aspire in .NET 8

Firstly, the Redis cache is added to the application. AddRedis is an extension message that came with the Redis package. The name ‘cache’ is a reference that could be whatever you like.

Next, the API is added to the orchestration. The project name Aspire1.ApiService is converted to the valid C# identifier Aspire1_ApiService by converting the ‘.’ to an ‘_’. Again, the name ‘apiservice’ is free for you to choose.

Finally, the frontend is added, with references to both the cache and the API. These are not dependencies in the C# sense, where one project can access public members of the other. This simply means that Aspire will run up the referenced projects when the application is run.

It’s All C#

Before Aspire, a similar result could be achieved using tools such as Docker and Docker Compose. The individual projects could be built as Docker images and then orchestrated into a single application using Docker Compose.

Configuring such a system is done by writing YAML (which may stand for Yet Another Markup Language, or alternatively YAML Ain’t Markup Language). While this is a powerful and flexible way to configure an application, it’s another language to master.

In Aspire, all the configuration is done in C#, as can be seen above. In addition to being a language that developers are familiar with, this also has the benefit of all the IntelliSense and AI support that we get in Visual Studio.

Configuration

For the frontend to use the API, it must know the correct URL. Without Aspire, the developer must lookup the address of the API from that project’s launchsettings.json and use it in the frontend’s appsettings.json, to be read in Program.cs. Having done this for a development environment, the developer would then have to do the same for the URLs for the deployed application. Once there are several microservices, this can become unmanageable.

Aspire vastly simplifies the entire process. The frontend’s Program.cs configures the address with the following code:

Streamline Microservice Development with .NET Aspire in .NET 8

The ‘https+http’ simply says that either protocol can be used, but the ‘apiservice’ is the name that was given to the project in the AppHost’s Program.cs, above. Whatever URL the API is running on, either for development or deployment, will automatically be used by the frontend.

Similarly, in the generated tests in WebTests.cs, the name ‘webfrontend’ is used in place of a specific address for the Blazor app.

Streamline Microservice Development with .NET Aspire in .NET 8

Further configuration is done in the ServiceDefaults project. This is where all the telemetry and analytics are configured. For the most part, it can be left as is.

Conclusion

Aspire has much more to offer than there is room to describe here, and at first glance it may seem like a complex solution to a problem you don’t have, which may be so. But if you’re a developer who finds yourself spending more and more time writing YAML, and less doing the programming that you enjoy, then maybe Aspire is for you.


Would you like to know more?

If you found this article interesting you might be interested in our Microsoft.NET Training Courses.

Share this post on:

We would love to hear from you

Get in touch

or call us on +44 (0) 20 3137 3920