0

我是使用 Quartz.net 的新手,我的问题如下:我创建了一个 WCF 服务器,其中包括一个接口,其中包含调度程序可以执行的操作,以及一个实现接口的类,其中分配了实例化调度程序和方法的构造函数。

在其他地方,在同一个项目中,我可以创建一个包含简单作业定义的库:

public class MyJob : IJob
{
    public virtual void Execute(IJobExecutionContext context)
    {
       // Body of the job
    }

当我与客户端连接时,一切正常,但我需要以不同的方式包含作业,包括.dll在石英服务文件夹中的动态。但我不知道怎么做。

我一直在寻找解决方案,并且找到了与System.Reflection; 但我不知道我必须在哪里放置一个可能的代码

4

2 回答 2

0

我有这样的典型 ScheduleJob 方法

    public void ScheduleJob(string jobName, string groupName, string triggerName, string cron, bool a)
    {            
        // Load the assembly
        AssemblyName assembly = AssemblyName.GetAssemblyName(@"C:\Program Files\Quartz.net\Jobs2.dll");
        System.Reflection.Assembly obj = System.Reflection.Assembly.Load(assembly);
        Type type = obj.GetType("MyJob2");

        if (!(type is IJob))
        {
            // Nothing, because the Job only have one method from IJob
        }

        // Contructor
        ConstructorInfo ctor = type.GetConstructor(new Type[] { });

        object loadedObject = ctor.Invoke(new object[] { obj });
        IJob importedObject = (IJob)loadedObject;                       


        JobKey jobKey = new JobKey(jobName, groupName);
        IJobDetail jobDetail = JobBuilder.Create(importedObject.GetType())
            .WithIdentity(jobName, groupName)
            .Build();
        TriggerKey tkey = new TriggerKey(triggerName, groupName);
        ITrigger cronTrigger = TriggerBuilder.Create()
            .WithIdentity(tkey)
            .ForJob(jobDetail)
            .WithCronSchedule(cron)
            .Build();
        AddJob(jobName, groupName, a);
        GetScheduler().ScheduleJob(cronTrigger);

但是,当我使用我的客户端执行此方法时,我收到以下异常:

- 你调用的对象是空的 -

非常感谢您之前的回答!

于 2013-04-18T14:49:11.507 回答
0

看来您需要从 .dll 文件动态加载程序集,这可以通过反射来完成。

var assembly = Assembly.LoadFile(@"yourDllFilesPath.dll"); // this loads the assembly

现在,你可以得到这个程序集类

var type = assembly.GetType("Foo");  // a class Foo 

现在你有了类型,你还需要创建这种类型的实例,这可以使用Activator

object obj=Activator.CreateInstance(type);
于 2013-04-17T11:48:02.307 回答