Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Services.WebApp/3.3/PluginManager.cs @ 12428

Last change on this file since 12428 was 12428, checked in by ascheibe, 9 years ago

#2394 added web app and status page to trunk

File size: 1.9 KB
Line 
1using System.Collections.Concurrent;
2using System.Collections.Generic;
3using System.IO;
4using System.Web;
5using System.Web.Http;
6
7namespace HeuristicLab.Services.WebApp {
8  public class PluginManager {
9
10    private static PluginManager instance;
11    public static PluginManager Instance {
12      get { return instance ?? (instance = new PluginManager()); }
13    }
14
15    private readonly IDictionary<string, Plugin> plugins;
16
17    public HttpConfiguration Configuration { get; set; }
18
19    private string PluginsDirectory {
20      get { return string.Format(@"{0}WebApp\plugins", HttpRuntime.AppDomainAppPath); }
21    }
22
23    public PluginManager() {
24      plugins = new ConcurrentDictionary<string, Plugin>();
25    }
26
27    public Plugin GetPlugin(string name) {
28      Plugin plugin;
29      plugins.TryGetValue(name, out plugin);
30      if (plugin == null) {
31        string directory = string.Format(@"{0}\{1}", PluginsDirectory, name);
32        if (Directory.Exists(directory)) {
33          plugin = new Plugin {
34            Name = name,
35            Directory = directory
36          };
37          plugin.Configure(Configuration);
38          plugins.Add(name, plugin);
39        }
40      }
41      return plugin;
42    }
43
44    public IEnumerable<Plugin> GetPlugins() {
45      DiscoverPlugins();
46      return plugins.Values;
47    }
48
49    private void DiscoverPlugins() {
50      var pluginDirectories = Directory.GetDirectories(PluginsDirectory);
51      foreach (var directory in pluginDirectories) {
52        string pluginName = Path.GetFileName(directory);
53        Plugin plugin;
54        plugins.TryGetValue(pluginName, out plugin);
55        if (plugin == null) {
56          plugin = new Plugin {
57            Name = pluginName,
58            Directory = directory
59          };
60          plugin.Configure(Configuration);
61          plugins.Add(pluginName, plugin);
62        }
63      }
64    }
65  }
66}
Note: See TracBrowser for help on using the repository browser.