zoukankan      html  css  js  c++  java
  • Net Core的启动项Program

    在WebApi的项目中和在控制台中都是有Program启动项的身影

    API中基本就是下面的这样,基本是不动,而是把配置的信息,放在StartUp中
    namespace
    HubAPI { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>();//可以看到这里是去出发StartUp这个类了。 }); } }
    namespace HubAPI
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    IConfiguration 是用来加载配置值的,可以加载内存键值对、JSON或XML配置文件,我们通常用来加载缺省的appsettings.json .
    public IConfiguration Configuration { get; }

    下面这个参数Services :指定服务描述符集合的协定(就是说,你需要的服务就是要在这个里面进行Add,下面的每一个服务都是Add开头的)
    public void ConfigureServices(IServiceCollection services) { services.AddControllers();
    //这个是绑定GetSection--》AppSetting
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
    /

    绑定数据库db,就这个Configuration就可以读取到Appsettings.Json的数据了 string conn = Configuration.GetConnectionString("db"); services.AddDbContext<HubData.ACC_MINIEHUBContext> ( p => p.UseSqlServer(conn).EnableSensitiveDataLogging() ); //service bus services.AddSingleton<ITopicClient>(x => { return new TopicClient(Configuration.GetConnectionString("azure"), "servicesbus2topic1"); }); services.AddApiVersioning(option => { option.ReportApiVersions = true; option.AssumeDefaultVersionWhenUnspecified = true; option.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0); }); services.AddHttpClient(); services.AddTransient<HubService.SOService>(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } }
    {
      "ConnectionStrings": {
        "db": "锄禾日当午"    
      },
    
      "AppSettings": {   
        "静夜思": "李白",
        "悯农": "李绅"
      },
    
      "Logging": {
        "LogLevel": {
          "Default": "Trace",
          "Microsoft": "Information"
        }
      },
      "AllowedHosts": "*"
    }

    下面说下控制台应用程序的配置怎么搞

    using HubDatetime;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using System;
    
    namespace HubBackend
    {
        class Program
        {
            private static IConfiguration Configuration { get; set; }
            static void Main(string[] args)
            {
                //IHostBuilder是供库和应用程序初始化、生成和运行主机的主要组件:
                //就认为是启动的地基,一切都在HostBuildr上面建立起来,
                //Host主机,Builder 建设
                var buildr = new HostBuilder();
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //获取环境变量 //var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); //加载配置文件ConfigurationBuilder 这个写法,可以参考:https://www.jianshu.com/p/b9416867e6e6 var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) //.AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //配置sb buildr.ConfigureWebJobs((h, b) => { b.AddAzureStorageCoreServices(); b.AddServiceBus(c => { c.ConnectionString = h.Configuration.GetConnectionString("acc_azure"); c.MessageHandlerOptions.MaxConcurrentCalls = 1; }); } );
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //加入该句会把执行过程中的语句在控制台输出 buildr.ConfigureLogging((context, b) => { b.AddConsole(); });
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //h是HostBuilderContext,也可以理解成上下文,这个上下文是主机Host与数据仓库与Configuration配置文件做交互 //services是IServiceCollection //配置服务(就是配置数据库,Service等等) buildr.ConfigureServices((h, services) => { Configuration = h.Configuration; services.AddOptions();
    //绑定数据库hub string hub = h.Configuration.GetConnectionString("hub"); services.AddDbContext<HUBContext> ( p => p.UseSqlServer(hub) ); services.AddHttpClient(); //配置生命周期 services.AddTransient<HubService.SO>(); services.AddTransient<HubService.Inventory>(); services.AddSingleton(Configuration); services.AddSingleton<HubDatetime.IStandardDateTime, HubDatetime.StandardDateTime>(); });
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    //HostBuilder 组建起来了,"变形金刚要站起来"了,Build(); var host = buildr.Build(); using (host) { host.Run();//运行程序 } } } }
    人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。
  • 相关阅读:
    一起复习几何(2)
    如何应用设计模式设计你的足球引擎(第三、四部分)完
    一起复习几何(1)
    链接错误C1128和LNK1210
    VS2008 在IE中 调试 ActiveX控件
    从 Chrome 谈到 Adobe
    <Dive into Python>大补贴(1)
    Debian Package 管理问题
    PXELINUX实现网络安装操作系统
    计算机世界中的道德伦理
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/13571565.html
Copyright © 2011-2022 走看看