Thursday, October 18, 2018

Dependency Injection and Registering a custom controller in Sitecore MVC


1. In the controller:

using System;
using System.Web.Mvc;
using Feature.Salesforce.Models;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using System.ServiceModel;
using Feature.Salesforce.Repositories;
using Xcentium.SitecoreAsAService.Feature.Salesforce.SFMC.ServiceReference;

namespace Xcentium.SitecoreAsAService.Feature.Salesforce.Controllers
{
    public class SalesforceController : System.Web.Mvc.Controller
    {
        private readonly ISalesforceRepository _salesforceRepository;
       
        public SalesforceController(ISalesforceRepository salesforceRepository)
        {
            _salesforceRepository = salesforceRepository;
        }

        public ActionResult RequestForInformationForm()
        {
            return View("RequestForInformationForm");
        }

        public ActionResult SubscriberForm()
        {
            return View("SubscriberForm");
        }

        [HttpPost]
        public ActionResult RequestForImformation(RequestForInformation model)
        {
            String result = _salesforceRepository.CreateLead(model);
            return View("LeadCreated");
        }

....


2. In a config file:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <services>
      <configurator type="Xcentium.SitecoreAsAService.Feature.Salesforce.DependencyInjection.ServicesConfigurator, Xcentium.SitecoreAsAService.Feature.Salesforce"/>
    </services>
  </sitecore>
</configuration>


3. In the DependencyInjection folder:

using Feature.Salesforce.Repositories;
using Microsoft.Extensions.DependencyInjection;
using Sitecore.DependencyInjection;
using Xcentium.SitecoreAsAService.Feature.Salesforce.Controllers;

namespace Xcentium.SitecoreAsAService.Feature.Salesforce.DependencyInjection
{
    public class ServicesConfigurator : IServicesConfigurator
    {
        public void Configure(IServiceCollection serviceCollection)
        {
            serviceCollection.AddScoped<ISalesforceRepository, SalesforceRepository>();
            serviceCollection.AddTransient(typeof(SalesforceController));
        }
    }
}

No comments:

Post a Comment