Client class
Describes how to work with instances of the Client class.
The Client
class in the .NET Client API for Optimizely Search & Navigation covers common operations such as indexing objects, getting documents, deleting documents, and searching.
The Client
class, abstracted by the IClient
interface acts as a gateway or façade for the Optimizely Search & Navigation service. The class covers most operations you would want to perform, such as indexing objects, getting documents, deleting documents, and searching. The Client
class methods do not, however, map directly to the service. These methods enforce several conventions, most of which can be customized, to provide additional functionality and a more convenient way of working with the service. Client
is further enhanced by several extension methods, most notably the Search
method, the starting point for building search requests using a fluent API.
Obtain an IClient instance
You can instantiate the Client
class directly, but its constructor requires several parameters. As these parameters primarily concern configuration details, the Client
class also has a parameter-less static method, CreateFromConfig
, which returns an instance of the class based on configuration settings. To use the Client.CreateFromConfig
method, you must first add a configuration section to your solution. See .NET Client API.
With that in place, you can obtain an instance of the Client
class:
IClient client = Client.CreateFromConfig();
Manage instances
Creating an instance of the Client
class is not a costly operation, but performance may be affected. In many scenarios, you also want to modify the instance before usage, meaning you want to instantiate it on application startup. You should only use a single instance per application or a few long-lived instances with different settings or conventions.
You can accomplish this in several ways, depending on the type of application in which the Client
class is being used. In an ASP.NET MVC website, you can configure the DependencyResolver
to automatically inject the instance into controllers. Likewise, an Inversion
of Control
container can inject the instance into the presenter in a Web Forms site using the MVP pattern. In other situations, you can manage the instance in a custom class in a Singleton-like fashion. The following example illustrates how to wire up injection of the Client
class into controllers in an ASP.NET site that uses the Autofac MVC integration.
protected void Application_Start() {
var builder = new ContainerBuilder();
builder.Register(x => CreateSearchClient()).As<IClient>().SingleInstance();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
private static Client CreateSearchClient() {
var client = Client.CreateFromConfig();
//Any modifications required goes here
return client;
}
Use Client instance with CMS
Note
Do not create a new instance of
IClient
if you are using Optimizely Search & Navigation with Optimizely Content Management System (CMS), since content indexing and index querying may fail.
When using Optimizely Search & Navigation with CMS, you should never create an instance of IClient
.
If you have EPiServer.Find.Cms
installed, there is already a configured instance in SearchClient.Instance
. Because Client
holds the convention information, if an instance is created after you apply the conventions, it may cause the content indexing and querying to fail because it overwrites previous configurations.
Instead, use SearchClient.Instance
to get an instance of IClient
, configured through an initialization module in EPiServer.Find.Cms
.
Updated 6 months ago