Исключение Stackoverflow при разрешении Quartz.ISchedulerFactory - PullRequest
0 голосов
/ 06 ноября 2019

Почему я получаю исключение stackoverflow в

     var serviceHost = container.Resolve<IServiceHost>();
    class Program
        {
            static void Main(string[] args)
            {
                RunProgram().GetAwaiter().GetResult();
            }

            private static async Task RunProgram()
            {
                var container = new UnityContainer();
                container.RegisterSingleton<ISchedulerFactory, Quartz.Impl.StdSchedulerFactory>();
                container.RegisterSingleton<IServiceHost,ServiceHost>();

                var serviceHost = container.Resolve<IServiceHost>();
                await serviceHost.Start();

                Console.Read();
            }
        }

        public class Download : IJob
        {
            public Task Execute(IJobExecutionContext context)
            {
                return Task.Run(() => Console.WriteLine("Downloading..."));
            }
        }

        public class ServiceHost : IServiceHost
        {
            public ISchedulerFactory SchedulerFactory { get; set; }

            public ServiceHost(ISchedulerFactory schedulerFactory)
            {
                SchedulerFactory = schedulerFactory;
            }

            public async Task Start()
            {
                ....
            }
        }

Но если я создаю подкласс StdSchedulerFactory и регистрирую / разрешаю это, оно работает

    public class CustomSchedulerFactory : StdSchedulerFactory
    {

    }

    class Program
        {
            static void Main(string[] args)
            {
                RunProgram().GetAwaiter().GetResult();
            }

            private static async Task RunProgram()
            {
                var container = new UnityContainer();
                container.RegisterSingleton<ISchedulerFactory, CustomSchedulerFactory>();
                container.RegisterSingleton<IServiceHost,ServiceHost>();

                var serviceHost = container.Resolve<IServiceHost>();
                await serviceHost.Start();

                Console.Read();
            }
        }
...