Я использую отражение для создания объектов из внешней сборки. Моя проблема в том, что я не могу создать объект таким образом:
Type t = assembly.GetType("ExternalClass");
object obj = Activator.CreateInstance(t, new object[] { data, Type.Missing, Type.Missing });
Я получаю System.MissingMethodException: Additional information: Constructor on type 'ExternalClass' not found.
Однако таким образом все работает нормально:
Type t = assembly.GetType("ExternalClass");
ConstructorInfo[] constructors = t.GetConstructors();
object obj = constructors[0].Invoke(new object[] { data, Type.Missing, Type.Missing });
ExternalClass
имеет только 1 конструктор с 2 необязательными параметрами, и я уверен, что передаю правильные аргументы, потому что второй способ создает нужный мне объект. Я что-то пропустил в первом подходе? Я бы предпочел первый, потому что он легче читается
РЕДАКТИРОВАТЬ: я забыл о CultureInfo
(зачем он нужен этому методу?!). Решение заключается в использовании:
object obj = Activator.CreateInstance(t,
BindingFlags.CreateInstance |
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.OptionalParamBinding, null, new object[] { data, Type.Missing, Type.Missing }, CultureInfo.CurrentCulture);
constructors[0].IsPublic
дает мне Правда, это действительно так - person YogoWafel   schedule 17.02.2018CreateInstance
с помощьюBindingFlags.OptionalParamBinding
? Может быть, это проблема - person YogoWafel   schedule 17.02.2018