I-Typen von geladenen Baugruppen zum Beispiel lesen:Reflection - Aufruf Konstruktor mit Parametern
var someType = loadedAssemblies
.Where(a => a != null && a.FullName.StartsWith("MY."))
.SelectMany(a => a.GetTypes())
.Distinct()
.ToArray()[0];
Wenn counstructor Parameter hat, ich kann sie lesen:
ParameterInfo[] parameters = classType.GetConstructors()[0].GetParameters();
Ich mag würde Konstruktor mit Standard anrufen Parameterwerte oder wenn der Parameter enum ist, mit dem ersten Enum-Wert. Wenn nur ein Parameter ist, und es ist Enum, funktioniert es wie folgt aus:
object curObject = Activator.CreateInstance(classType, new object[] { parameters[0].ParameterType.GetEnumValues().GetValue(0) });
Wie kann ich dies tun, wenn es mehr Parameter sind? Ich brauche Objekt zu erstellen, um die Eigenschaft zu lesen:
var propertyInfo = someType.GetProperty("EntityType");
string entityType = propertyInfo.GetValue(curObject, null).ToString();
Hallo Fabjan, danke für diese Lösung. Es gibt ein Problem. Ich habe nur classType, die ich zur Laufzeit gelesen habe. Ich weiß nicht für den Objekt (Klasse) Namen zur Kompilierzeit. Ihr Code: var curObject = MyFactory.MyCreateInstance
Ich habe meine Antwort sowie Codebeispiel auf DotNetfiddle – Fabjan
aktualisiert Vielen Dank, es funktioniert perfekt.Kennen Sie den Unterschied zwischen constructor.Invoke vs Activator.CreateInstance? – Simon