从动态加载的dll访问单独解决方案中的实例成员

时间:2019-04-26 19:42:35

标签: .net dll dllimport dynamic-dll-import

我在C#项目中遇到了难题。我想从解决方案之外的另一个dll导入和调用方法。我在加载器中通过加载dll,遍历方法并将它们添加到列表(“命令”)中来做到这一点

加载程序:

namespace LoaderNamespace{
public void Import(string Path)
        {
            try
            {
                Assembly assembly = Assembly.LoadFrom(Path);
                Type type = assembly.GetType(Path);
                object instance = Activator.CreateInstance(type); //creates an instance of that class 
                MethodInfo[] methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance);
                foreach (MethodInfo method in methods)
                {
                    ParameterInfo[] parameterInfo = method.GetParameters();
                    if (parameterInfo.Length == 2)
                    {
                        Command delegatey = method.CreateDelegate(typeof(Command)) as Command;
                        Commands.Add(method.Name, delegatey);
                    }
                }
            }
            catch (Exception)
            {
                OutputError(line, "Error while importing dll.");
            }
        }
    }

dll:

namespace Commands
{
    public class Commands
    {
        public void Test()
        {
            LoaderNamespace.OutputText("Just coming along to tell you that your code is working!!");
        }
    }
}

命令基本上是通过调用执行的。

问题:

“ LoaderNamespace”具有一个称为OutputText的方法。

public void OutputText(string Text)
        {
            if (Text != null && outputAction != null)
            {
                outputAction(Text);
            }
        }

我希望能够从我的dll进行调用。我还想访问“ LoaderNamespace”中的其他变量。简而言之,我想访问从Test()本身调用Test()的实例,以便可以更改变量等。

(这些代码段中的任何内容都可以根据需要更改)

非常感谢!

0 个答案:

没有答案