Welcome to the navigation

Nulla esse velit nostrud deserunt et occaecat excepteur sint elit, ea cillum aliqua, magna in ex qui in exercitation culpa amet, lorem laborum, officia consequat. Aliqua, consectetur consequat, mollit dolor et anim magna adipisicing ex minim pariatur, excepteur dolore laboris deserunt velit lorem ullamco dolor labore culpa amet, in cupidatat

Yeah, this will be replaced... But please enjoy the search!

Injecting Umbraco IContentService into a Unity Container

I've been using Unity with Umbraco ModelsBuilder for a while. Figured I should share some of my snippets. Here is how you inject IContentService into the Unity Container.

About IContentService

From the docs: Defines the ContentService, which is an easy access to operations involving IContent. https://our.umbraco.com/apidocs/csharp/api/Umbraco.Core.Services.IContentService.html

Using with Unity

Unity, the Microsoft IoC Container. 

// Injecting existing contentservice instance into the unity container
// Eric Herlitz - www.herlitz.io
container.RegisterType(
    lifetimeManager: new SingletonLifetimeManager(),
    injectionMembers: new InjectionFactory(
        c => ApplicationContext.Current.Services.ContentService
    ));
Nothing fancy to it really, we simply register the singleton instance from ApplicationContext.Current.Services.ContentService with the interface in the Unity IoC Container.

Usage

public class WhateverService
{
    private readonly IContentService _contentService;

    public WhateverService(IContentService contentService)
    {
        _contentService = contentService;
    }

    public string GetNameById(int id)
    {
        return $"The name of the node is {_contentService.GetById(id).Name}";
    }

    public IContent GetById(int id)
    {
        return _contentService.GetById(id);
    }
}

Unity will inject the IContentService using constructor injection and expose it in the _contentService variable. This will work in any injectable object in Umbraco as well as custom implementations and classes.