Welcome to the navigation

In anim proident, do commodo dolor sed est occaecat mollit tempor officia et velit deserunt ad nulla aliquip sit ipsum eiusmod culpa cupidatat fugiat pariatur. Sunt reprehenderit in ex commodo aute in ut culpa enim sint anim est nisi exercitation adipisicing officia laborum, cillum ipsum lorem ut aliquip consectetur ea

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.