43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
using PluginsConventionLibrary.Plugins;
|
||
using System.ComponentModel.Composition;
|
||
using System.ComponentModel.Composition.Hosting;
|
||
|
||
namespace UniversityView
|
||
{
|
||
public class PluginsManager
|
||
{
|
||
//Тег, указывающий, что plugins должны быть заполнены CompositionContainer
|
||
[ImportMany(typeof(IPluginsConvention))]
|
||
IEnumerable<IPluginsConvention> plugins { get; set; }
|
||
|
||
public readonly Dictionary<string, IPluginsConvention> plugins_dictionary = new Dictionary<string, IPluginsConvention>();
|
||
|
||
public PluginsManager()
|
||
{
|
||
AggregateCatalog catalog = new AggregateCatalog();
|
||
catalog.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
|
||
catalog.Catalogs.Add(new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins")));
|
||
|
||
//Контейнер композиции
|
||
CompositionContainer container = new CompositionContainer(catalog);
|
||
try
|
||
{
|
||
container.ComposeParts(this);
|
||
}
|
||
catch (CompositionException compositionException)
|
||
{
|
||
MessageBox.Show(compositionException.ToString());
|
||
}
|
||
if (plugins.Any())
|
||
{
|
||
plugins
|
||
.ToList()
|
||
.ForEach(p =>
|
||
{
|
||
if (!plugins_dictionary.Keys.Contains(p.PluginName))
|
||
plugins_dictionary.Add(p.PluginName, p);
|
||
});
|
||
}
|
||
}
|
||
}
|
||
} |