Quartz.Net原理分析-反射
新建类库:Quartz
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Quartz
{
public interface IJob
{
void Execute(string message);
}
}
新建类库:Quartz.JobItems
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Quartz.JobItems
{
public class Job1 : IJob
{
public void Execute(string message)
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.WriteLine("Job1:Excuted"+",InputMessage:"+ message);
Console.BackgroundColor = ConsoleColor.Black;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Quartz.JobItems
{
public class Job2 : IJob
{
public void Execute(string message)
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.WriteLine("Job2:Excuted" + ",InputMessage:" + message);
Console.BackgroundColor = ConsoleColor.Black;
}
}
}
新建控制台程序:Quartz原理分析
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Reflection;
using Quartz;
namespace Quartz原理分析
{
class Program
{
static void Main(string[] args)
{
string appDir = AppDomain.CurrentDomain.BaseDirectory;
foreach (var path in Directory.GetFiles(appDir))
{
if (path.Contains(".dll"))
{
Console.WriteLine(path);
Assembly ab = Assembly.LoadFile(path);
foreach (var type in ab.GetTypes())
{
Console.WriteLine("类名:" + type.Name);
Console.WriteLine("名称空间:" + type.Namespace);
var itypes = type.FindInterfaces(new TypeFilter((t, j) => { return t.ToString() == j.ToString(); }), "Quartz.IJob");
foreach (var itype in itypes)
{
Console.WriteLine("类继续接口:" + itype.Name);
if (itype.Name == "IJob")
{
IJob job = (IJob)ab.CreateInstance(type.Namespace + "." + type.Name);
job.Execute(itype.Name);
}
}
}
}
}
Console.ReadKey();
}
}
}
项目结构:
运行结果: