Work Modules

This commit is contained in:
2026-03-19 13:58:29 +02:00
parent 7fde404b5a
commit 0dd13c5a8b
4 changed files with 67 additions and 44 deletions

View File

@@ -5,10 +5,10 @@ using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using VisionAsist.Models;
using VisionAsist.SDK;
namespace VisionAsist.ViewModels;
using System.IO;
using System.Linq;
namespace VisionAsist.ViewModels;
public class ModuleItem
{
public string Name { get; set; }
@@ -17,18 +17,18 @@ public class ModuleItem
public class SettingsViewModel : ViewModelBase
{
string Plugin = Path.Combine(AppContext.BaseDirectory, "Modules");
public ObservableCollection<ModuleItem> Modules { get; } = new();
public SettingsViewModel()
{
string[] folderNames = new DirectoryInfo(Plugin)
.GetDirectories()
.Select(d => d.Name)
.ToArray();
foreach (string folderName in folderNames)
foreach (string Name in Core._loadedModules.Keys)
{
AddModule(folderName);
AddModule(Name);
}
}
@@ -43,29 +43,14 @@ public class SettingsViewModel : ViewModelBase
private void OpenSettings(string moduleName)
{
string dllPath = Path.Combine(AppContext.BaseDirectory, "Modules", moduleName, "Module.dll");
if (File.Exists(dllPath))
var module = Core._loadedModules.Values.FirstOrDefault(m => m.Name == moduleName);
if (module != null)
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.InputEncoding = System.Text.Encoding.UTF8;
Assembly assembly = Assembly.LoadFrom(dllPath);
var type = assembly.GetTypes().FirstOrDefault(t =>
typeof(IModule).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract);
if (type != null)
{
// 4. Создаем экземпляр класса (WeatherModule)
var module = (IModule)Activator.CreateInstance(type)!;
Console.WriteLine($"Успешно загружен модуль: {module.Name}");
// 5. Запускаем команду и передаем текущее окно (this) в качестве родителя
var result = module.Execute("ShowWeather", new object[] { this });
Console.WriteLine($"Ответ модуля: {result}");
}
else
{
Console.WriteLine("В DLL не найден класс, реализующий VisionAsist.SDK.IModule!");
}
module.Execute("ShowWeather", new object[] { this });
}
}
}