C# - 在运行时加载程序集,在实例上调用的方法似乎无效

时间:2010-04-29 16:38:18

标签: c# reflection assemblies

我正在尝试加载程序集,从该程序集中实例化一个类,然后调用Run(),它应该在此实例中设置一个属性。

加载程序集似乎工作正常,因为我能够列出类型,但被调用的方法似乎无效:位于新实例中的属性保持设置为null,表明它应该设置为东西。

我也尝试使用type.InvokeMethod(...)语法调用该方法。

加载程序集,调用构造函数并调用方法的方法:

private IEntryPoint ChargerAppli(AppInfo ai)
{
        string cheminAssemblies = "D:\\TFS\\OBL Microsoft\\Stages\\2010\\WPF\\Shell\\Shell\\Applications\\";

        Assembly a = Assembly.LoadFile(cheminAssemblies + ai.AssemblyName);
        Type type = a.GetType(ai.StartupClass);

        IEntryPoint instance = Activator.CreateInstance(type) as IEntryPoint;
        instance.Run();
        return instance;
}

IEntryPoint接口:

public interface IEntryPoint
{
    FrameworkElement HostVisual { get; set; }
    void Run();
}

我正在尝试加载的IEntryPoint实现,它位于新程序集中:

class Bootstrap : IEntryPoint
{
    private FrameworkElement _visuel;

    public Bootstrap()
    {
        //do some work;
        this._visuel = new MainVisual();
    }

    public System.Windows.FrameworkElement HostVisual { get; set; }

    public void Run()
    {
        HostVisual = this._visuel;
    }
}

我可能缺少什么?

1 个答案:

答案 0 :(得分:0)

假设程序集正在运行,这是我用来完成相同任务的一段简化代码。

 Assembly assembly = Assembly.LoadFile(file);
 Type[] types = assembly.GetTypes();
 foreach (Type t in types)
 {
    MethodInfo[] methods = t.GetMethods();

   if (t.Name == "MyType")
   {
       foreach (MethodInfo method in methods)
       {
           if (method.Name == "Run")
           {
               try
               {
                   InterfaceToMyType activeModule = ("InterfaceToMyType")method.Invoke(null, args);
               }
               catch
               {
                    //do stuff here if needed
               }
           }
       }
   }
}