я прочитал тип из загруженных сборок, например:Отражение - Вызов конструктора с параметрами
var someType = loadedAssemblies
.Where(a => a != null && a.FullName.StartsWith("MY."))
.SelectMany(a => a.GetTypes())
.Distinct()
.ToArray()[0];
Если counstructor имеет параметры, я могу читать их:
ParameterInfo[] parameters = classType.GetConstructors()[0].GetParameters();
Я хотел бы вызвать конструктор по умолчанию значения параметра или если параметр является перечислением, с первым значением перечисления. Если имеется только один параметр, и это перечисление, это работает так:
object curObject = Activator.CreateInstance(classType, new object[] { parameters[0].ParameterType.GetEnumValues().GetValue(0) });
Как я могу это сделать, когда есть несколько параметров? мне нужно создать объект для чтения свойства:
var propertyInfo = someType.GetProperty("EntityType");
string entityType = propertyInfo.GetValue(curObject, null).ToString();
Привет, Fabjan, спасибо за это решение. Есть одна проблема. У меня есть только classType, который я читаю во время выполнения. Я не знаю имя объекта (класса) во время компиляции. Ваш код: var curObject = MyFactory.MyCreateInstance
Я обновил свой ответ, а также пример кода на DotNetfiddle – Fabjan
Спасибо, он отлично работает.Знаете ли вы разницу между конструктором.Invoke vs Activator.CreateInstance? – Simon