Simon J Ovens
Feb 17, 2017
  2347
(0 votes)

Setting up Episerver Find on a development machine using Autofac

Setting up Episerver Find is straight forward but I did run into a few steps that could stump new players.

The first two following steps are well documented so I will not go into them.

Step 1: Create an Episerver Find account online.

Step 2: Add the web config details to your project.

Step 3: Next we add the Autofac dependency Injection code into our Global.asax.cs file, most of the code goes into the Application_Start() method that already exist. 
Note: Below I am registering all Controllers in the application using builder.RegisterControllers(typeof(EpiServerApplication).Assembly) so just changed the EpiServerApplication class to match your application. 
We then register our search client class and set the dependency resolver using Autofac.
This means we only instantiate the Client class once and then inject it into our controllers, which improves the applications performance.  

    public class EPiServerApplication : EPiServer.Global
    {
        protected void Application_Start()
        {
            var builder = new ContainerBuilder();
            builder.RegisterControllers(typeof(EPiServerApplication).Assembly);
            builder.Register(x =>
                CreateSearchClient()).As<IClient>().SingleInstance();
            var container = builder.Build();
            DependencyResolver.SetResolver(
                new AutofacDependencyResolver(container));

            //Standard MVC stuff
            AreaRegistration.RegisterAllAreas();
        }

        private static IClient CreateSearchClient()
        {
            var client = Client.CreateFromConfig();
            //Any modifications required goes here    
            return client;
        }
    }

 

Step 4: On the Episerver Alloy template the code above didnt compile because it was missing some important DLLs, to fix this we now need to add the Autofac.dll and Autofac.Integration.Mvc.dll to our project.

In Visual Studio go to Tools > NuGet Package Manager > Package Manager Console

In the Package Manager Console enter the following:

PM > Install Package Autofac

Then run

PM > Install Package Autofac.Mvc5   

The code we entered above will now resolve and you should be able to build your project without errors.

Step 5: Now in a Controller we need to add an IClient property, which as you can see below I called FindServiceClient. 
Then add a constructor with the IClient parameter that we are injecting into and set it to the FindServiceClient property. 
Now we can write queries against the Find service as follows, this code is from a block controller that returns pages:

    public class TopRatedHomesBlockController : BlockController<TopRatedHomesBlock>
    {
        public IClient FindServiceClient { get; private set; }

        public TopRatedHomesBlockController(IClient client)
        {
            FindServiceClient = client;
        }

        public override ActionResult Index(TopRatedHomesBlock currentBlock)
        {
            var contentResult = FindServiceClient.Search<AccommodationPage>()
                            .Filter(h => h.Rating.GreaterThan(4))
                            .GetContentResult();

            var model = new TopRatedHomesBlockModel
            {
                Heading = currentBlock.Heading,
                ContentResult = contentResult
            };

            return PartialView(model);
        }
    }

Step 6: In the code above I am using an extension method to get PageData, the AccommodationPage class inherits StandardPage which inherits SitePageData which inherits PageData, the extension method used is called GetContentResult() .

To use this extension method we must add the following using to our class:

using EPiServer.Find.Cms;    

Completed: That wraps up how to setup the powerful Episerver Find!  
  

Feb 17, 2017

Comments

Please login to comment.
Latest blogs
Opti ID overview

Opti ID allows you to log in once and switch between Optimizely products using Okta, Entra ID, or a local account. You can also manage all your use...

K Khan | Jul 26, 2024

Getting Started with Optimizely SaaS using Next.js Starter App - Extend a component - Part 3

This is the final part of our Optimizely SaaS CMS proof-of-concept (POC) blog series. In this post, we'll dive into extending a component within th...

Raghavendra Murthy | Jul 23, 2024 | Syndicated blog

Optimizely Graph – Faceting with Geta Categories

Overview As Optimizely Graph (and Content Cloud SaaS) makes its global debut, it is known that there are going to be some bugs and quirks. One of t...

Eric Markson | Jul 22, 2024 | Syndicated blog

Integration Bynder (DAM) with Optimizely

Bynder is a comprehensive digital asset management (DAM) platform that enables businesses to efficiently manage, store, organize, and share their...

Sanjay Kumar | Jul 22, 2024

Frontend Hosting for SaaS CMS Solutions

Introduction Now that CMS SaaS Core has gone into general availability, it is a good time to start discussing where to host the head. SaaS Core is...

Minesh Shah (Netcel) | Jul 20, 2024

Optimizely London Dev Meetup 11th July 2024

On 11th July 2024 in London Niteco and Netcel along with Optimizely ran the London Developer meetup. There was an great agenda of talks that we put...

Scott Reed | Jul 19, 2024