Converted over ThumbnailProviderManager to ThumbnailProvidersResolver using the new apis.

This commit is contained in:
shannon@ShandemVaio
2012-08-01 11:24:39 +06:00
parent c2ee1e63bb
commit dff3905e85
11 changed files with 89 additions and 92 deletions

View File

@@ -11,4 +11,5 @@ namespace Umbraco.Core.Interfaces
bool CanProvideThumbnail(string fileUrl);
string GetThumbnailUrl(string fileUrl);
}
}

View File

@@ -16,7 +16,7 @@ namespace Umbraco.Core
/// these old classes don't contain metadata, the objects need to be instantiated first to get their metadata, we then store this
/// for use in the GetById method.
/// </remarks>
internal abstract class LegacyTransientObjectsResolver<T> : ManyObjectResolverBase<T>
internal abstract class LegacyTransientObjectsResolver<T> : ManyObjectsResolverBase<T>
where T : class
{

View File

@@ -5,7 +5,7 @@ using System.Web;
namespace Umbraco.Core.Resolving
{
internal abstract class ManyObjectResolverBase<TResolved>
internal abstract class ManyObjectsResolverBase<TResolved>
where TResolved : class
{
private List<TResolved> _applicationInstances = null;
@@ -13,10 +13,10 @@ namespace Umbraco.Core.Resolving
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an empty list of objects.
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an empty list of objects.
/// </summary>
/// <param name="scope">The lifetime scope of instantiated objects, default is per Application</param>
protected ManyObjectResolverBase(ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
protected ManyObjectsResolverBase(ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
{
if (scope == ObjectLifetimeScope.HttpRequest)
{
@@ -32,11 +32,11 @@ namespace Umbraco.Core.Resolving
}
/// <summary>
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an empty list of objects.
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an empty list of objects.
/// with creation of objects based on an HttpRequest lifetime scope.
/// </summary>
/// <param name="httpContext"></param>
protected ManyObjectResolverBase(HttpContextBase httpContext)
protected ManyObjectsResolverBase(HttpContextBase httpContext)
{
LifetimeScope = ObjectLifetimeScope.HttpRequest;
CurrentHttpContext = httpContext;
@@ -44,23 +44,23 @@ namespace Umbraco.Core.Resolving
}
/// <summary>
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an initial list of objects.
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an initial list of objects.
/// </summary>
/// <param name="value">The list of objects.</param>
/// <param name="scope">If set to true will resolve singleton objects which will be created once for the lifetime of the application</param>
protected ManyObjectResolverBase(IEnumerable<Type> value, ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
protected ManyObjectsResolverBase(IEnumerable<Type> value, ObjectLifetimeScope scope = ObjectLifetimeScope.Application)
: this(scope)
{
InstanceTypes = new List<Type>(value);
}
/// <summary>
/// Initializes a new instance of the <see cref="ManyObjectResolverBase{TResolved}"/> class with an initial list of objects
/// Initializes a new instance of the <see cref="ManyObjectsResolverBase{TResolved}"/> class with an initial list of objects
/// with creation of objects based on an HttpRequest lifetime scope.
/// </summary>
/// <param name="httpContext"></param>
/// <param name="value"></param>
protected ManyObjectResolverBase(HttpContextBase httpContext, IEnumerable<Type> value)
protected ManyObjectsResolverBase(HttpContextBase httpContext, IEnumerable<Type> value)
: this(httpContext)
{
InstanceTypes = new List<Type>(value);

View File

@@ -70,7 +70,7 @@
<Compile Include="Logging\LogHelper.cs" />
<Compile Include="ObjectExtensions.cs" />
<Compile Include="RazorDataTypeModelStaticMappingItem.cs" />
<Compile Include="Resolving\ManyObjectResolverBase.cs" />
<Compile Include="Resolving\ManyObjectsResolverBase.cs" />
<Compile Include="Resolving\ObjectLifetimeScope.cs" />
<Compile Include="Resolving\SingleObjectResolverBase.cs" />
<Compile Include="TypeExtensions.cs" />

View File

@@ -70,7 +70,7 @@ namespace Umbraco.Tests
{
}
private sealed class TransientObjectsResolver : ManyObjectResolverBase<ITestInterface>
private sealed class TransientObjectsResolver : ManyObjectsResolverBase<ITestInterface>
{
public TransientObjectsResolver()
: base(ObjectLifetimeScope.Transient)
@@ -83,7 +83,7 @@ namespace Umbraco.Tests
}
}
private sealed class ApplicationObjectsResolver : ManyObjectResolverBase<ITestInterface>
private sealed class ApplicationObjectsResolver : ManyObjectsResolverBase<ITestInterface>
{
public ApplicationObjectsResolver()
: base(ObjectLifetimeScope.Application)
@@ -96,7 +96,7 @@ namespace Umbraco.Tests
}
}
private sealed class HttpRequestObjectsResolver : ManyObjectResolverBase<ITestInterface>
private sealed class HttpRequestObjectsResolver : ManyObjectsResolverBase<ITestInterface>
{
public HttpRequestObjectsResolver(HttpContextBase httpContext)
: base(httpContext)

View File

@@ -1,75 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Umbraco.Core.Interfaces;
using umbraco.BusinessLogic;
using umbraco.BusinessLogic.Utils;
namespace Umbraco.Web.Media.ThumbnailProviders
{
public class ThumbnailProviderManager
{
private const string CacheKey = "ThumbnailProviderCache";
internal static IEnumerable<IThumbnailProvider> Providers
{
get
{
EnsureCache();
return HttpRuntime.Cache[CacheKey] as List<IThumbnailProvider>;
}
set
{
HttpRuntime.Cache.Insert(CacheKey, value);
}
}
public static string GetThumbnailUrl(string fileUrl)
{
var provider = Providers.FirstOrDefault(x => x.CanProvideThumbnail(fileUrl));
return provider != null ? provider.GetThumbnailUrl(fileUrl) : string.Empty;
}
private static void EnsureCache()
{
if (HttpRuntime.Cache[CacheKey] != null)
return;
var providers = new List<IThumbnailProvider>();
var types = TypeFinder.FindClassesOfType<IThumbnailProvider>();
foreach (var t in types)
{
IThumbnailProvider typeInstance = null;
try
{
if (t.IsVisible)
{
typeInstance = Activator.CreateInstance(t) as IThumbnailProvider;
}
}
catch { }
if (typeInstance != null)
{
try
{
providers.Add(typeInstance);
}
catch (Exception ee)
{
Log.Add(LogTypes.Error, -1, "Can't import IThumbnailProvider '" + t.FullName + "': " + ee);
}
}
}
providers.Sort((f1, f2) => f1.Priority.CompareTo(f2.Priority));
Providers = providers;
}
}
}

View File

@@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Umbraco.Core;
using Umbraco.Core.Interfaces;
using Umbraco.Core.Resolving;
using umbraco.BusinessLogic;
using umbraco.BusinessLogic.Utils;
namespace Umbraco.Web.Media.ThumbnailProviders
{
internal sealed class ThumbnailProvidersResolver : ManyObjectsResolverBase<IThumbnailProvider>
{
#region Singleton
private static readonly ThumbnailProvidersResolver Instance =
new ThumbnailProvidersResolver(PluginTypeResolver.Current.ResolveThumbnailProviders());
public static ThumbnailProvidersResolver Current
{
get { return Instance; }
}
#endregion
#region Constructors
static ThumbnailProvidersResolver() { }
/// <summary>
/// Constructor
/// </summary>
/// <param name="providers"></param>
internal ThumbnailProvidersResolver(IEnumerable<Type> providers)
: base(providers)
{
}
#endregion
public IEnumerable<IThumbnailProvider> Providers
{
get
{
var vals = Values.ToList();
//ensure they are sorted
vals.Sort((f1, f2) => f1.Priority.CompareTo(f2.Priority));
return vals;
}
}
public string GetThumbnailUrl(string fileUrl)
{
var provider = Providers.FirstOrDefault(x => x.CanProvideThumbnail(fileUrl));
return provider != null ? provider.GetThumbnailUrl(fileUrl) : string.Empty;
}
}
}

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Threading;
using Umbraco.Core;
using Umbraco.Core.Interfaces;
using Umbraco.Web.Routing;
using umbraco;
using umbraco.interfaces;
@@ -44,5 +45,15 @@ namespace Umbraco.Web
{
return resolver.ResolveAttributedTypes<XsltExtensionAttribute>();
}
/// <summary>
/// Returns all IThumbnailProvider classes
/// </summary>
/// <param name="resolver"></param>
/// <returns></returns>
internal static IEnumerable<Type> ResolveThumbnailProviders(this PluginTypeResolver resolver)
{
return resolver.ResolveTypes<IThumbnailProvider>();
}
}
}

View File

@@ -13,7 +13,7 @@ namespace Umbraco.Web.Routing
/// <summary>
/// A multiply registered resolver to manage all IDocumentLookup objects
/// </summary>
internal sealed class DocumentLookupsResolver : ManyObjectResolverBase<IDocumentLookup>
internal sealed class DocumentLookupsResolver : ManyObjectsResolverBase<IDocumentLookup>
{
#region Singleton
private static readonly DocumentLookupsResolver Instance = new DocumentLookupsResolver(

View File

@@ -249,7 +249,7 @@
<Compile Include="Media\ThumbnailProviders\MediaTypeIconThumbnailProvider.cs" />
<Compile Include="Media\ThumbnailProviders\FileExtensionIconThumbnailProvider.cs" />
<Compile Include="Media\ThumbnailProviders\ImageThumbnailProvider.cs" />
<Compile Include="Media\ThumbnailProviders\ThumbnailProviderManager.cs" />
<Compile Include="Media\ThumbnailProviders\ThumbnailProvidersResolver.cs" />
<Compile Include="UI\Controls\FolderBrowser.cs" />
<Compile Include="Routing\LookupById.cs" />
<Compile Include="Routing\LookupByNiceUrl.cs" />

View File

@@ -44,7 +44,7 @@ namespace Umbraco.Web.WebServices
x.PropertyType.DataTypeDefinition.DataType.Id == new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c"));
var fileUrl = fileProp != null ? fileProp.Value.ToString() : "";
var thumbUrl = ThumbnailProviderManager.GetThumbnailUrl(fileUrl);
var thumbUrl = ThumbnailProvidersResolver.Current.GetThumbnailUrl(fileUrl);
data.Add(new
{