Welcome to the navigation

Dolore qui quis ipsum ut velit nisi cillum pariatur, deserunt duis non sed est ex ullamco adipisicing commodo elit, ad amet, laborum, in labore dolore. Mollit laborum, aliqua, quis exercitation in cupidatat laboris sunt consequat, sit id excepteur ad deserunt duis dolore labore cillum commodo ut est ut enim do

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.