Updated the PluginTypeResolver to have a generic way of instantiating the plugin types it has

already found. Have added some notes to some classes that need to be fixed up. Removed the PluginTypeResolver
from the ApplicationContext since it is a utility and isn't exposing application objects.
This commit is contained in:
shannon@ShandemVaio
2012-07-27 01:01:34 +06:00
parent a6b9aca45a
commit dbe43a0918
8 changed files with 49 additions and 44 deletions

View File

@@ -12,40 +12,15 @@ namespace Umbraco.Web
/// </summary>
public static class PluginTypeResolverExtensions
{
private static IEnumerable<IDocumentLookup> _lookups;
private static readonly ReaderWriterLockSlim LookupsLocker = new ReaderWriterLockSlim();
/// <summary>
/// Returns all available ILookup objects
/// Returns all IDocumentLookup types
/// </summary>
/// <param name="resolver"></param>
/// <returns></returns>
internal static IEnumerable<IDocumentLookup> ResolveLookups(this PluginTypeResolver resolver)
internal static IEnumerable<Type> ResolveLookups(this PluginTypeResolver resolver)
{
if (_lookups == null)
{
using (new WriteLock(LookupsLocker))
{
var lookupTypes = resolver.TypeFinder.FindClassesOfType<IDocumentLookup>();
var lookups = new List<IDocumentLookup>();
foreach (var l in lookupTypes)
{
try
{
var typeInstance = Activator.CreateInstance(l) as IDocumentLookup;
lookups.Add(typeInstance);
}
catch (Exception ex)
{
//TODO: Need to fix logging so this doesn't bork if no SQL connection
//Log.Add(LogTypes.Error, -1, "Error loading ILookup: " + ex.ToString());
}
}
//set the global
_lookups = lookups;
}
}
return _lookups;
return resolver.ResolveTypes<IDocumentLookup>();
}
}