C# 在WCF服务中添加汇编指令

C# 在WCF服务中添加汇编指令,c#,wcf,quartz.net,C#,Wcf,Quartz.net,我是使用Quartz.net的新手,我的问题如下:我创建了一个WCF服务器,其中包括一个带有调度器可以执行的操作的接口,以及一个实现接口的类,在该接口中,分配了实例化调度器和方法的构造函数 在另一个地方,在同一个项目中,我可以创建一个具有简单作业定义的库: public class MyJob : IJob { public virtual void Execute(IJobExecutionContext context) { // Body of the job

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

在另一个地方,在同一个项目中,我可以创建一个具有简单作业定义的库:

public class MyJob : IJob
{
    public virtual void Execute(IJobExecutionContext context)
    {
       // Body of the job
    }
当我与客户端连接时,所有这些都可以正常工作,但我需要以不同的方式包含作业,包括动态地在quartz service文件夹中包含
.dll
。但我不知道怎么做


我一直在寻找解决方案,我发现了与
系统有关的东西;但是我不知道我必须把一个可能的代码放在哪里。似乎您需要从.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);

我有这样典型的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);
但是,当我使用客户端执行此方法时,我收到以下异常:

--对象引用未设置为对象的实例--


非常感谢您之前的回答

“我需要以不同的方式包含作业,包括在quartz服务文件夹中动态包含.dll”-您能详细说明一下吗?你到底想做什么?谢谢你的关注。我不想“手动”将Job.dll包含到quartz服务文件夹中,而是希望远程包含它们。然后,我需要用触发器来安排作业,我不知道用什么方法来完成。我对服务的测试包括对项目中库上作业的描述,在远程服务器类中,我有sched.ScheduleJob(jobDetail,trigger)方法。但是,如果我只有Jobs.dll,我不知道如何“关联”触发器。例如,如果我在quartz服务文件夹中有一个不同作业的dll列表,jobA.dll、jobB.dll等等,我想知道如何向调度程序说我想调度jobA和触发器。谢谢你的回答。但是我可以把这些线放在哪里呢?在方法ScheduleJob?@user2290341中,通常是关于如何通过反射加载程序集和类型的,具体实现取决于您和您的工作,不是吗?以及我如何在复制ScheduleJob()之前“关联”触发器?