Sitecore Experience Platform

Inject your own activity type service

You can use your own service in the context of an activity type. You must register custom services  in configuration and inject them in the activity type constructor. 

Create service and add to activity type constructor

  1. Create an interface and a concrete implementation for your service. The following example uses an IExampleService interface and an ExampleService concrete class:

    using System;
    
    namespace Documentation.Examples
    {
        public interface IExampleService
        {
            void DoSomething();
        }
    
        public class ExampleService() : IExampleService
        {
            public void DoSomething()
            {
                // Does something
            }
        }
    }
    
  2. Add the service interface to the constructor of your activity type and set a private service property as shown:

    using Sitecore.Xdb.MarketingAutomation.Core.Activity;
    using Sitecore.Xdb.MarketingAutomation.Core.Processing.Plan;
    using Microsoft.Extensions.Logging;
    
    namespace Documentation.Examples
    {
        public class DoNothingActivity : IActivity
        {
            private IExampleService ExampleService { get; set; }
    
            public IActivityServices Services { get; set; }
    
            public DoNothingActivity(IExampleService exampleService)
            {
                ExampleService = exampleService;
            }
    
            public ActivityResult Invoke(IContactProcessingContext context)
            {
                ExampleService.DoSomething();
    
                return new SuccessMove();
            }
        }
    }
    

Add service to configuration

  1. Navigate to the following folder in the Automation Engine root: \App_Data\Config\sitecore\MarketingAutomation

    Tip

    In a local instance, the Automation Engine is located in the C:\path\to\xconnect\App_data\jobs\continuous\AutomationEngine folder.

  2. Create a new XML file that extends sc.MarketingAutomation.ActivityServices.xml and registers your custom services:

    <Settings>
    <!--
        Marketing Automation Activity Services configuration
    -->
    <Sitecore>
        <XConnect>
        <MarketingAutomation>
            <Engine>
            <Services>
                <Documentation.ExampleService>
                    <Type>Documentation.Examples.ExampleService, Documentation.Examples</Type>
                    <As>Documentation.Examples.IExampleService, Documentation.Examples</As>
                    <LifeTime>Singleton</LifeTime>
                </Documentation.ExampleService>
            </Services>
            </Engine>
        </MarketingAutomation>
        </XConnect>
    </Sitecore>
    </Settings>
    

    Note

    Node names must be unique - for example, there can only be one Documentation.ExampleService node. The node name is up to you - it does not need to be the full namespace of the service.