zoukankan      html  css  js  c++  java
  • .net core 控制台项目中使用依赖注入和配置文件

    之前想要新建一个控制台项目,用来调试.net core Web项目,因为每次启动web项目去测试service层的代码太麻烦了,但是控制台项目又没有依赖注入也没有配置文件,只能自己加载了,以下是步骤及代码

    • 首先新建一个控制台项目,以下是主要代码,需要从nuget上下载如下类库 Microsoft.Extensions.Hosting Microsoft.Extensions.Configuration Microsoft.Extensions.DependencyInjection
      class Program
        {
            private static  IFoo _fooService;
            private static IConfiguration _configuration;
    
            static async Task Main(string[] args)
            {
                using IHost host = CreateHostBuilder(args).Build();
                
                using(var provider = host.Services.CreateScope())
                {
                    _fooService = provider.ServiceProvider.GetService<IFoo>();
                    _configuration = provider.ServiceProvider.GetService<IConfiguration>();
                }
                var connectionString = _configuration.GetConnectionString("default");
    
                Console.WriteLine(_fooService.Bar());
    
                SQLTest();
                Console.ReadKey();
    
                await host.RunAsync();
            }
    
    
            private static void SQLTest()
            {
                string connectionStr = _configuration.GetConnectionString("default");
                SqlConnection conn = new SqlConnection(connectionStr);
                conn.Open();
                var connState = conn.State;
                Console.WriteLine($"数据库状态:{(connState == System.Data.ConnectionState.Open ? "已打开" : "未打开")}");
                conn.Close();
               
    
            }
    
            static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureAppConfiguration((hostingContext,config) =>
                    {
                        config.SetBasePath(GetApplicationRoot());
                        config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
                        
                    })
                    .ConfigureServices(services =>
                    {
                        services.AddScoped<IFoo, Foo>();
                    })
            ;
    
            static string GetApplicationRoot()
            {
                //此处获取的是执行文件目录(bin目录),我们配置文件一般是放在项目的根目录下,
                //所以此处使用正则匹配一下,如果您有更好的方式,欢迎留言告知
                var exePath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
                Regex appPathMatcher = new Regex(@"(?<!fil)[A-Za-z]:\+[Ss]*?(?=\+bin)");
                var appRoot = appPathMatcher.Match(exePath).Value;
                return appRoot;
            }
        }
    
    • appsettings.json 文件
      {
        "ConnectionStrings": {
          "default": "server=.;database=ReportServer;uid=sa;pwd=123456"
    
        }
      }
    
    • IFoo.cs 文件
      public interface IFoo
      {
         string Bar();
      }
    
    • Foo.cs 文件
      public class Foo: IFoo
        {
            public string Bar()
            {
                return "Get Success";
            }
        }
    
    • 最终结果,配置文件正常加载,接口正常注入
  • 相关阅读:
    数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
    51Nod1123 X^A Mod B 数论 中国剩余定理 原根 BSGS
    BZOJ2219 数论之神 数论 中国剩余定理 原根 BSGS
    BZOJ3583 杰杰的女性朋友 矩阵
    BZOJ2821 作诗(Poetize) 主席树 bitset
    BZOJ2178 圆的面积并 计算几何 辛普森积分
    BZOJ1058 [ZJOI2007]报表统计 set
    BZOJ2480 Spoj3105 Mod 数论 扩展BSGS
    BZOJ1095 [ZJOI2007]Hide 捉迷藏 动态点分治 堆
    AtCoder Regular Contest 101 (ARC101) D
  • 原文地址:https://www.cnblogs.com/getpower/p/14941054.html
Copyright © 2011-2022 走看看