我有以下代码:
public static void Invoke(string assemblyName, string scheduledTaskExecutorName)
{
ObjectHandle objectHandle = Activator.CreateInstance(assemblyName, scheduledTaskExecutorName);
IScheduledTaskExecutor scheduledTaskExecutor = (IScheduledTaskExecutor)objectHandle.Unwrap();
scheduledTaskExecutor.ExecuteScheduledTask();
}
我有一个名为DummyScheduledTaskExecutor
的课程,如下所示:
public class DummyScheduledTaskExecutor : IScheduledTaskExecutor
{
public void ExecuteScheduledTask()
{
DummyTextFile.Text = "Success!";
}
}
它驻留在一个程序集中,其程序集名称(在程序集的属性中定义)为Tests.WebApplication.Application.Unit
。
我对Invoke(string, string)
的呼吁如下:
ScheduledTaskInvoker.Invoke("Tests.WebApplication.Application.Unit", "DummyScheduledTaskExecutor");
尝试运行此代码只会引发TypeLoadException。我是否错误地表达了程序集或类型名称,或者是否还有其他内容?
答案 0 :(得分:2)
scheduledTaskExecutorName需要包含命名空间。
尝试在第二个参数中包含整个命名空间。
我的例子:
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
object obj = Activator.CreateInstance(null, "WindowsFormsApplication6.TestClass");
}
}
}
namespace WindowsFormsApplication6
{
public class TestClass
{
}
}
答案 1 :(得分:0)
您是否尝试过装配绑定日志?
答案 2 :(得分:0)
CreateInstance 将假定已加载程序集。我的猜测实际上并非如此。您需要使用 CreateInstanceFrom 。
编辑:如果您知道程序集已加载,那么您的参数很可能是CreateInstance的问题。使用完全限定的类型名称而不是像现在这样的简单类名。