Я не уверен на 100%, что понимаю все, что вы пытаетесь достичь, но для того, чтобы создать экземпляр именованного класса (убедитесь, что вы включили полное имя; fullNamespace.className) и вызвал методи свойство для него, вы можете сделать это следующим образом:
private static string GetPropertyValue(Assembly assembly, string className,
string propertyName)
{
object instance = assembly.CreateInstance(className);
Type classType = instance.GetType();
MethodInfo method = classType.GetMethod("LoadFromXmlData");
method.Invoke(instance, new object[] { classType, myData });
PropertyInfo property = classType.GetProperty(propertyName);
return property.GetValue(instance, null).ToString();
}
Это вызовет LoadFromXmlData с типом класса, который будет загружен и некоторые данные XML.
ВЧтобы избежать отражения при вызове метода LoadFromXmlData, необходимо создать интерфейс, который должны реализовывать все динамически загружаемые типы:
interface IXmlLoadable
{
void LoadFromXmlData(Type type, string data);
}
Затем вызов метода можно упростить до следующего:
((IXmlLoadable)instance).LoadFromXmlData(classType, myData));
Если вы используете C # 4, вы можете использовать динамическое ключевое слово для упрощения работы с отражением:
private static string GetPropertyValue(Assembly assembly, string className,
string propertyName)
{
dynamic instance = assembly.CreateInstance(className);
Type classType = instance.GetType();
instance.LoadFromXmlData(classType, "<xml></xml>");
PropertyInfo property = classType.GetProperty(propertyName);
return property.GetValue(instance, null).ToString();
}