Quartz.Net原理分析-反射

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();
        }
    }
}

项目结构:

运行结果:


猜你喜欢

转载自blog.csdn.net/xiaoxionglove/article/details/67645714
今日推荐