我正在尝试加载程序集,从该程序集中实例化一个类,然后调用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;
}
}
我可能缺少什么?
答案 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
}
}
}
}
}