using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Linq; using System.Reflection; using Autofac; using PluginSystem; namespace WpfApp4 { public class PluginLoader { private readonly string _pluginDirectory; public PluginLoader(string pluginDirectory) { _pluginDirectory = pluginDirectory; } // 加载插件并注册到Autofac容器 public void LoadPlugins(ContainerBuilder builder) { if (!Directory.Exists(_pluginDirectory)) { Directory.CreateDirectory(_pluginDirectory); return; } // 加载插件程序集 var pluginAssemblies = Directory.GetFiles(_pluginDirectory, "*.dll") .Select(Assembly.LoadFrom) .ToList(); // 注册所有实现IJobPlugin接口的类型 builder.RegisterAssemblyTypes(pluginAssemblies.ToArray()) .Where(t => typeof(IJobPlugin).IsAssignableFrom(t) && !t.IsAbstract) //.As()--错误加上就查不出来插件 .InstancePerDependency(); // 注册插件元数据 foreach (var assembly in pluginAssemblies) { var pluginTypes = assembly.GetTypes() .Where(t => typeof(IJobPlugin).IsAssignableFrom(t) && !t.IsAbstract); foreach (var type in pluginTypes) { // 可以存储插件元数据,如类型名称等 } } } } }