Windows服务使用Windsor容器

该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇。

Windsor是ABP框架自带的IOC容器
关于什么是IOC,你可以Bing或者Google一下,英文不错的话推荐看一看 https://www.tutorialsteacher.com/ioc
更多关于Castle Windsor 可以阅读下列文章

现在比较常用的DI组件可以访问awesome系列查看:

微软自带DI替换为Castle Windsor

问题点在于ABP框架使用的是Castle Windsor,而微软提供的官方容器是Microsoft.Extensions.DependencyInjection

这就涉及到一个使用Castle Windsor替换Microsoft.Extensions.DependencyInjection的问题。
Castle Windsor提供了注册的方法,自己实现的话,可以通过循环访问微软自带DI容器,将其一一注册到Castle Windsor容器。

也可以nuget引用一个包:Castle.Windsor.MsDependencyInjection,源码查看:https://github.com/volosoft/castle-windsor-ms-adapter

代码改自如何在控制台应用(.Net Core)使用appsettings.json配置,需要再添加两个包

Microsoft.Extensions.Hosting
Castle.Windsor.MsDependencyInjection

需要添加以下代码

        public IConfiguration AppConfiguration { get; set; }

        public override void PreInitialize()
        {
            var host = new HostBuilder().ConfigureAppConfiguration((hostContext, configApp) =>
            {
                var hostingEnvironment = hostContext.HostingEnvironment;
                AppConfiguration = AppConfigurations.Get(hostingEnvironment.ContentRootPath, hostingEnvironment.EnvironmentName);
            }).ConfigureServices((hostContext, services) =>
            {
                services.AddSingleton(AppConfiguration);

                WindsorRegistrationHelper.CreateServiceProvider(IocManager.IocContainer, services);
            });

            host.Build();
        }

如何使用Castle Windsor

  • 构造函数
  • IocManager.Instance.IocContainer.Resolve()

猜你喜欢

转载自www.cnblogs.com/AlienXu/p/10919585.html