.net core 控制檯專案中使用依賴注入和配置檔案
阿新 • • 發佈:2021-06-27
之前想要新建一個控制檯專案,用來除錯.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]:\\+[\S\s]*?(?=\\+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"; } }
- 最終結果,配置檔案正常載入,介面正常注入