Wednesday, February 23, 2022

Dependency Injection with Sitecore

 https://doc.sitecore.com/xp/en/developers/93/sitecore-experience-manager/dependency-injection.html

using Lincare.Feature.Forms.Controllers;

using Lincare.Feature.Forms.Repositories;

using Microsoft.Extensions.DependencyInjection;

using Sitecore.DependencyInjection;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;


namespace Lincare.Feature.Forms.IoC

{

public class FormsConfigurator : IServicesConfigurator

{

public void Configure(IServiceCollection serviceCollection)

{

//adding it here helps with 'no parameterless constructor found' error

serviceCollection.AddTransient<IFormsRepository, FormsRepository>();

serviceCollection.AddTransient<FormsController>();

serviceCollection.AddTransient<VirtualVisitsController>();

}

}

}


<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:environment="http://www.sitecore.net/xmlconfig/environment">

  <sitecore>

    <services>

      <configurator type="Lincare.Feature.Forms.IoC.FormsConfigurator, Lincare.Feature.Forms"/>

    </services>


Then register routes:


using Sitecore.Pipelines;

using System.Web.Mvc;

using System.Web.Routing;


namespace Lincare.Feature.Forms.Pipelines.Initialize

{

public class RegisterRoutes

{

public virtual void Process(PipelineArgs args)

{

RegisterRoute(RouteTable.Routes);

}


protected virtual void RegisterRoute(RouteCollection routes)

{

RouteTable.Routes.MapRoute(

"Forms",                                           

"api/Forms/{Action}",                            

new { controller = "Lincare.Feature.Forms.Controllers.FormsController, Lincare.Feature.Forms", action = "Test" }  

);


RouteTable.Routes.MapRoute("VirtualVisits", "api/VirtualVisits/{action}", new

{

action = "Find",

controller = "Lincare.Feature.Forms.Controllers.VirtualVisitsController, Lincare.Feature.Forms"

});


RouteTable.Routes.MapRoute("Recaptcha", "api/Recaptcha/{action}", new

{

action = "GetRecaptchaSiteKey",

controller = "Lincare.Feature.Forms.Controllers.RecaptchaController, Lincare.Feature.Forms"

});

}

}

}


And then controller. 


using Lincare.Feature.Forms.Repositories;

using Sitecore.XA.Foundation.Mvc.Controllers;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;


namespace Lincare.Feature.Forms.Controllers

{

    public class RecaptchaController : StandardController

    {

    private readonly IRecaptchaRepository _recaptchaRepository;

    public RecaptchaController(IRecaptchaRepository recaptchaRepository)

    {

    _recaptchaRepository = recaptchaRepository ?? throw new ArgumentException(nameof(recaptchaRepository));

    }

public ActionResult RecaptchaMeta()

{

string recaptchaSiteKey = _recaptchaRepository.GetRecaptchaSiteKey();

return View("/Views/Lincare/Forms/RecaptchaMeta.cshtml", recaptchaSiteKey);

}


[HttpGet]

public ActionResult GetRecaptchaSiteKey()

{

//return Json(new { key = _recaptchaRepository.GetRecaptchaSiteKey()}, JsonRequestBehavior.AllowGet);

return Json("test");

}

}

}




No comments:

Post a Comment