Windows服務使用Windsor容器

該文章是系列文章 基於.NetCore和ABP框架如何讓Windows服務執行Quartz定時做業 的其中一篇。html

Windsor是ABP框架自帶的IOC容器
關於什麼是IOC,你能夠Bing或者Google一下,英文不錯的話推薦看一看 https://www.tutorialsteacher.com/ioc
更多關於Castle Windsor 能夠閱讀下列文章git

如今比較經常使用的DI組件能夠訪問awesome系列查看:github

微軟自帶DI替換爲Castle Windsor

問題點在於ABP框架使用的是Castle Windsor,而微軟提供的官方容器是Microsoft.Extensions.DependencyInjectionjson

這就涉及到一個使用Castle Windsor替換Microsoft.Extensions.DependencyInjection的問題。
Castle Windsor提供了註冊的方法,本身實現的話,能夠經過循環訪問微軟自帶DI容器,將其一一註冊到Castle Windsor容器。app

也能夠nuget引用一個包:Castle.Windsor.MsDependencyInjection,源碼查看:https://github.com/volosoft/castle-windsor-ms-adapter框架

代碼改自如何在控制檯應用(.Net Core)使用appsettings.json配置,須要再添加兩個包ide

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()
相關文章
相關標籤/搜索