using System; using System.Collections.Generic; using System.IO; using System.Linq; using Umbraco.Core.Cache; using Umbraco.Core.Logging; using Umbraco.Core.IO; using Umbraco.Core.Manifest; using Umbraco.Core.ObjectResolution; namespace Umbraco.Core.PropertyEditors { /// /// A resolver to resolve all property editors /// /// /// This resolver will contain any property editors defined in manifests as well! /// public class PropertyEditorResolver : LazyManyObjectsResolverBase { public PropertyEditorResolver(IServiceProvider serviceProvider, ILogger logger, Func> typeListProducerList, IRuntimeCacheProvider runtimeCache) : base(serviceProvider, logger, typeListProducerList, ObjectLifetimeScope.Application) { var builder = new ManifestBuilder( runtimeCache, new ManifestParser(new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), runtimeCache)); _unioned = new Lazy>(() => Values.Union(builder.PropertyEditors).ToList()); } [Obsolete("Use the ctor specifying all dependencies instead")] public PropertyEditorResolver(Func> typeListProducerList) : base(typeListProducerList, ObjectLifetimeScope.Application) { var builder = new ManifestBuilder( ApplicationContext.Current.ApplicationCache.RuntimeCache, new ManifestParser(new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), ApplicationContext.Current.ApplicationCache.RuntimeCache)); _unioned = new Lazy>(() => Values.Union(builder.PropertyEditors).ToList()); } internal PropertyEditorResolver(IServiceProvider serviceProvider, ILogger logger, Func> typeListProducerList, ManifestBuilder builder) : base(serviceProvider, logger, typeListProducerList, ObjectLifetimeScope.Application) { _unioned = new Lazy>(() => SanitizeNames(Values.Union(builder.PropertyEditors).ToList())); } private static List SanitizeNames(List editors) { var nestedContentEditorFromPackage = editors.FirstOrDefault(x => x.Alias == "Our.Umbraco.NestedContent"); if (nestedContentEditorFromPackage != null) nestedContentEditorFromPackage.Name = "(Obsolete) " + nestedContentEditorFromPackage.Name; return editors; } private readonly Lazy> _unioned; /// /// Returns the property editors /// public virtual IEnumerable PropertyEditors { get { return _unioned.Value; } } /// /// Returns a property editor by alias /// /// /// public virtual PropertyEditor GetByAlias(string alias) { return PropertyEditors.SingleOrDefault(x => x.Alias == alias); } } }