我正在使用 .NET Serialization 反序列化一个名叫
但现在,我想改变我的程序以加载目录中的所有dll,并剔除实现
我不再控制实现
有没有一种方式在运行时设置此属性?或者设置实现类的类似属性?
Method
的类。该类包含实现 IAction
接口的对象列表。我最初使用了 [XmlInclude]
属性来指定所有实现 IAction
接口的类。但现在,我想改变我的程序以加载目录中的所有dll,并剔除实现
IAction
接口的类。然后用户可以反序列化包含其实现IAction
的文件。我不再控制实现
IAction
接口的类,因此无法使用[XmlInclude]
。有没有一种方式在运行时设置此属性?或者设置实现类的类似属性?
public class Method
{
public List<Actions.IAction> Actions = new List<Actions.IAction>();
}
public interface IAction
{
void DoExecute();
}
public static Type[] LoadActionPlugins(string pluginDirectoryPath)
{
List<Type> pluginTypes = new List<Type>();
string[] filesInDirectory = Directory.GetFiles(pluginDirectoryPath, "*.dll", SearchOption.TopDirectoryOnly);
foreach (string pluginPath in filesInDirectory)
{
System.Reflection.Assembly actionPlugin = System.Reflection.Assembly.LoadFrom(pluginPath);
Type[] assemblyTypes = actionPlugin.GetTypes();
foreach (Type type in assemblyTypes)
{
Type foundInterface = type.GetInterface("IAction");
if (foundInterface != null)
{
pluginTypes.Add(type);
}
}
}
return pluginTypes.Count == 0 ? null : pluginTypes.ToArray();
}