готовая 4 лаба

This commit is contained in:
Полина Чубыкина 2024-11-12 08:59:29 +04:00
parent d17275873b
commit 3c0d1f9d6a
3 changed files with 38 additions and 54 deletions

View File

@ -23,10 +23,4 @@
<ProjectReference Include="..\PluginsConventionLibrary\PluginsConventionLibrary.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.IO.Packaging">
<HintPath>$(SolutionDir)Plugins\System.IO.Packaging.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

View File

@ -20,58 +20,43 @@ namespace AppByPlugins
public FormMain()
{
InitializeComponent();
_plugins = new();
LoadPlugins();
_plugins = LoadPlugins();
_selectedPlugin = string.Empty;
}
private void LoadPlugins()
{
List<IPluginsConvention> pluginsList = GetPlugins();
private Dictionary<string, IPluginsConvention> LoadPlugins()
{
var plugins = new Dictionary<string, IPluginsConvention>();
foreach (var plugin in pluginsList)
{
_plugins[plugin.PluginName] = plugin;
CreateMenuItem(plugin.PluginName);
}
}
string pluginsDir = Directory.GetParent(Directory.GetCurrentDirectory())!.Parent!.Parent!.Parent!.FullName + "\\Plugins";
private List<IPluginsConvention> GetPlugins()
{
string currentDir = Environment.CurrentDirectory;
string pluginsDir = Directory.GetParent(currentDir).Parent.Parent.Parent.FullName + "\\Plugins";
string[] dllFiles = Directory.GetFiles(
pluginsDir,
"*.dll",
SearchOption.AllDirectories
);
List<IPluginsConvention> plugins = new();
foreach (string dllFile in dllFiles)
{
try
{
Assembly assembly = Assembly.LoadFrom(dllFile);
Type[] types = assembly.GetTypes();
foreach (Type type in types)
{
if (typeof(IPluginsConvention).IsAssignableFrom(type) && !type.IsInterface)
{
if (Activator.CreateInstance(type) is IPluginsConvention plugin)
{
plugins.Add(plugin);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(
ex.Message
);
}
}
return plugins;
}
string[] dllFiles = Directory.GetFiles(pluginsDir, "*.dll", SearchOption.AllDirectories);
foreach (string dllFile in dllFiles)
{
try
{
Assembly assembly = Assembly.LoadFrom(dllFile);
Type[] types = assembly.GetTypes();
foreach (var type in types)
{
if (typeof(IPluginsConvention).IsAssignableFrom(type) && !type.IsInterface)
{
var plugin = (IPluginsConvention)Activator.CreateInstance(type)!;
plugins.Add(plugin.PluginName, plugin);
CreateMenuItem(plugin.PluginName);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Îøèáêà ïðè çàãðóçêå ñáîðêè {dllFile}: {ex.Message}");
}
}
return plugins;
}
private void CreateMenuItem(string pluginName)
{

View File

@ -25,7 +25,11 @@ namespace Components.Components
}
set
{
if (value != null && checkedListBox.Items.Contains(value)) checkedListBox.SelectedItem = value;
if (value != null && checkedListBox.Items.Contains(value))
{
checkedListBox.SelectedItem = value;
checkedListBox.SetItemChecked(checkedListBox.SelectedIndex, true);
}
}
}
@ -53,6 +57,7 @@ namespace Components.Components
if (index != checkedListBox.SelectedIndex)
{
checkedListBox.SetItemChecked(index, false);
checkedListBox.SetItemChecked(checkedListBox.SelectedIndex, false);
}
}
}