看看HttpApi.Host项目的程序入口program.cs,它还是一个console程序. 

ASP.NET Core应用的寄宿依赖于一个Host对象,通过对应的CreateDefaultBuilder的工厂方法创建启动一个Host, web服务器. 注册调用了StartUp类

using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;
public class Program
{
        public static int Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();        
        }
}

 internal static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .AddAppSettingsSecretsJson()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .UseAutofac()
                .UseSerilog();
    }

调用的Startup类

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddApplication<PlatformHttpApiHostModule>();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            app.InitializeApplication();
        }
    }

在ConfigureServices里调用PlatformHttpApiHostModule ,[DependsOn(typeof(XXXXModule))]//通过注解来定义依赖关系

 [DependsOn(
        typeof(PlatformHttpApiModule),
        typeof(AbpAutofacModule),
        typeof(AbpAspNetCoreMultiTenancyModule),
        typeof(PlatformApplicationModule),
        typeof(PlatformEntityFrameworkCoreModule),
        typeof(AbpAspNetCoreMvcUiBasicThemeModule),
        typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
        typeof(AbpAccountWebIdentityServerModule),
        typeof(AbpAspNetCoreSerilogModule),
        typeof(AbpSwashbuckleModule)
    )]
    public class PlatformHttpApiHostModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            var configuration = context.Services.GetConfiguration();
            var hostingEnvironment = context.Services.GetHostingEnvironment();

            ConfigureBundles();
            ConfigureUrls(configuration);
            ConfigureConventionalControllers();
            ConfigureAuthentication(context, configuration);
            ConfigureLocalization();
            ConfigureVirtualFileSystem(context);
            ConfigureCors(context, configuration);
            ConfigureSwaggerServices(context, configuration);
        }
}

 

所有模块都继承AbpModule,看一下它的定义

 

 

 ==========================================================================

手工撸一个例子,会更清晰

新建一个控制台程序,引用Volo.Abp.Core

 

 

 FirstModule.cs 文件

 [DependsOn(typeof(SecondModule))] //通过注解来定义依赖关系
    internal class FirstModule:AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            Console.WriteLine("FirstModule ConfigureServices");
            base.ConfigureServices(context);
        }
        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            Console.WriteLine("FirstModule OnApplicationInitialization");
            base.OnApplicationInitialization(context);
        }

    }

SecondModule.cs

    internal class SecondModule:AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            Console.WriteLine("SecondModule ConfigureServices");
            base.ConfigureServices(context);
        }
        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            Console.WriteLine("SecondModule OnApplicationInitialization");
            base.OnApplicationInitialization(context);
        }
    }

运行一下,

 

 

ABP 提供了自动依赖注入的接口,多例注册 ITransientDependency,范围注册IScopedDependency,单例注册ISingletonDependency 如何使用呢???

    var dum = app.Services[49] as IDummy;  //dont work!!!!
    Console.WriteLine(dum?.Say());
    dum = app.ServiceProvider.GetService(typeof(IDummy)) as IDummy;
    Console.WriteLine(dum?.Say());

 

posted on 2021-11-07 23:05  Gu  阅读(314)  评论(0编辑  收藏  举报