IUmbracoContextAccessor
In ASP.NET Core versions of Umbraco, the IUmbracoContextAccessor interface represents an injectable service that allows getting the current IUmbracoContext instance - if one is available. The IUmbracoContextAccessor describes a TryGetUmbracoContext method as well as a GetRequiredUmbracoContext extension method.
The TryGetUmbracoContext generally works well when you need to check whether an IUmbracoContext is currently available, and the GetRequiredUmbracoContext extension method will get the current IUmbracoContext - or throw an exception if not available.
We have found ourselves in situations where it's not super important whether an IUmbracoContext is available - eg. because we have addtional checks further down our code. For this, we've introduced a GetUmbracoContext extension method that returns the IUmbracoContext if available, or null if not.
In the example below, we have a custom service that injects IUmbracoContextAccessor, and then uses our GetUmbracoContext as part of a method chain for finding the news list from the ID of it's parent site:
using Skybrud.Essentials.Umbraco;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Web;
public class MyService {
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
public MyService(IUmbracoContextAccessor umbracoContextAccessor) {
_umbracoContextAccessor = umbracoContextAccessor;
}
public IPublishedContent? GetNewsList(int siteId) {
return _umbracoContextAccessor
.GetUmbracoContext()?.Content?
.GetById(siteId)?
.FirstChildOfType("newsList");
}
}