Files
Umbraco-CMS/src/Umbraco.Web/Search/ExamineComposer.cs
2020-07-09 16:33:01 +10:00

60 lines
2.8 KiB
C#

using System.Collections.Generic;
using Examine;
using Umbraco.Core;
using Umbraco.Core.Composing;
using Umbraco.Core.Models;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Scoping;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Examine;
namespace Umbraco.Web.Search
{
/// <summary>
/// Configures and installs Examine.
/// </summary>
[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public sealed class ExamineComposer : ComponentComposer<ExamineComponent>, ICoreComposer
{
public override void Compose(Composition composition)
{
base.Compose(composition);
// populators are not a collection: one cannot remove ours, and can only add more
// the container can inject IEnumerable<IIndexPopulator> and get them all
composition.Register<MemberIndexPopulator>(Lifetime.Singleton);
composition.Register<ContentIndexPopulator>(Lifetime.Singleton);
composition.Register<PublishedContentIndexPopulator>(Lifetime.Singleton);
composition.Register<MediaIndexPopulator>(Lifetime.Singleton);
composition.Register<IndexRebuilder>(Lifetime.Singleton);
composition.RegisterUnique<IUmbracoIndexConfig, UmbracoIndexConfig>();
composition.RegisterUnique<IUmbracoIndexesCreator, UmbracoIndexesCreator>();
composition.RegisterUnique<IPublishedContentValueSetBuilder>(factory =>
new ContentValueSetBuilder(
factory.GetInstance<PropertyEditorCollection>(),
factory.GetInstance<UrlSegmentProviderCollection>(),
factory.GetInstance<IUserService>(),
factory.GetInstance<IScopeProvider>(),
true));
composition.RegisterUnique<IContentValueSetBuilder>(factory =>
new ContentValueSetBuilder(
factory.GetInstance<PropertyEditorCollection>(),
factory.GetInstance<UrlSegmentProviderCollection>(),
factory.GetInstance<IUserService>(),
factory.GetInstance<IScopeProvider>(),
false));
composition.RegisterUnique<IValueSetBuilder<IMedia>, MediaValueSetBuilder>();
composition.RegisterUnique<IValueSetBuilder<IMember>, MemberValueSetBuilder>();
composition.RegisterUnique<BackgroundIndexRebuilder>();
//We want to manage Examine's AppDomain shutdown sequence ourselves so first we'll disable Examine's default behavior
//and then we'll use MainDom to control Examine's shutdown - this MUST be done in Compose ie before ExamineManager
//is instantiated, as the value is used during instantiation
ExamineManager.DisableDefaultHostingEnvironmentRegistration();
}
}
}