.NET Serileştirme'yi kullanarak Method
adlı bir sınıfı seri hale getiriyorum. Method
, IAction
'u uygulayan nesnelerin bir listesini içerir. İlk olarak IAction
'u uygulayan tüm sınıfları belirtmek için [XmlInclude]
özniteliğini kullandım.XmlInclude olmadan serileştirme
Ama şimdi, bir dizinde tüm dll'leri yüklemek ve IAction
'u uygulayan sınıfları çıkarmak için programımı değiştirmek istiyorum. Daha sonra kullanıcılar, IAction
'u uygulayan eylemlerini içeren dosyaları kaldırabilirler.
Artık IAction
uygulayan sınıfları denetlemiyorum, bu nedenle [XmlInclude]
kullanamıyorum.
Bu özniteliği çalışma zamanında ayarlamanın bir yolu var mı? Veya uygulama sınıfı için benzer bir özellik var mı?
public XmlSerializer(
Type type,
Type[] extraTypes
);
İkinci argüman olarak assemblyTypes sizin dizisi geçirmek gerekir:
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();
}