Создание экземпляра с параметрами и привлечение методов из DLL

Я загружаю DLL, создаю экземпляр и хочу вызвать методы и проверить возвращаемое значение. Я получаю исключение {"Несоответствие количества параметров".} При создании экземпляра:

    static void Main(string[] args)
    {

            ModuleConfiguration moduleConfiguration = new ModuleConfiguration();

            // get the module information
            if (!moduleConfiguration.getModuleInfo())
                throw new Exception("Error: Module information cannot be retrieved");


            // Load the dll
            string moduledll =  Directory.GetCurrentDirectory() + "\\" +
                                                       moduleConfiguration.moduleDLL;
            testDLL = Assembly.LoadFile(moduledll);

            // create the object
            string fullTypeName = "MyNameSpace."+ moduleConfiguration.moduleClassName;
            Type moduleType = testDLL.GetType(fullTypeName);

            Type[] types = new Type[1];
            types[0] = typeof(string[]);

            ConstructorInfo constructorInfoObj = moduleType.GetConstructor(
                        BindingFlags.Instance | BindingFlags.Public, null,
                        CallingConventions.HasThis, types, null);

            if (constructorInfoObj != null)
            {
                Console.WriteLine(constructorInfoObj.ToString());
                constructorInfoObj.Invoke(args);
            }

The constructor for the class in dll is:
public class SampleModule:ModuleBase
{
    /// <summary>
    /// Initializes a new instance of the <see cref="SampleModule" /> class.
    /// </summary> 
    public SampleModule(string[] args)
        : base(args)
    {
        Console.WriteLine("Creating SampleModule"); 
    }

Qs: 1. Что я делаю не так? 2. Как получить метод, вызвать его и получить возвращаемые значения? 3. Есть ли лучший способ сделать это?

1 ответ

Просто нужно добавить следующую строку:

Object[] param = new Object[1] { args };

до:

constructorInfoObj.Invoke(args);

Альтернативное (короткое) решение без использования ConstructorInfo:

        :

       // create the object
        string fullTypeName = "MyNameSpace."+ moduleConfiguration.moduleClassName;
        Type moduleType = testDLL.GetType(fullTypeName);

        Object[] param = new Object[1] { args };
        Activator.CreateInstance(runnerType, param);
Другие вопросы по тегам