| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using GreenTree.Nachtragsmanagement.Core;
- using GreenTree.Nachtragsmanagement.Core.Plugins;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web.Routing;
- namespace GreenTree.Nachtragsmanagement.Web.Framework.Mvc.Routes
- {
- public class RoutePublisher : IRoutePublisher
- {
- protected readonly ITypeFinder typeFinder;
- /// <summary>
- /// Ctor
- /// </summary>
- /// <param name="typeFinder"></param>
- public RoutePublisher(ITypeFinder typeFinder)
- {
- this.typeFinder = typeFinder;
- }
- /// <summary>
- /// Find a plugin descriptor by some type which is located into its assembly
- /// </summary>
- /// <param name="providerType">Provider type</param>
- /// <returns>Plugin descriptor</returns>
- protected virtual PluginDescriptor FindPlugin(Type providerType)
- {
- if (providerType == null)
- throw new ArgumentNullException("providerType");
- foreach (var plugin in PluginManager.ReferencedPlugins)
- {
- if (plugin.ReferencedAssembly == null)
- continue;
- if (plugin.ReferencedAssembly.FullName == providerType.Assembly.FullName)
- return plugin;
- }
- return null;
- }
- /// <summary>
- /// Register routes
- /// </summary>
- /// <param name="routes">Routes</param>
- public virtual void RegisterRoutes(RouteCollection routes)
- {
- var routeProviderTypes = typeFinder.FindClassesOfType<IRouteProvider>();
- var routeProviders = new List<IRouteProvider>();
- foreach (var providerType in routeProviderTypes)
- {
- //Ignore not installed plugins
- var plugin = FindPlugin(providerType);
- if (plugin != null && !plugin.Installed)
- continue;
- var provider = Activator.CreateInstance(providerType) as IRouteProvider;
- routeProviders.Add(provider);
- }
- routeProviders = routeProviders.OrderByDescending(rp => rp.Priority).ToList();
- routeProviders.ForEach(rp => rp.RegisterRoutes(routes));
- }
- }
- }
|