{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0be6f6cc",
   "metadata": {
    "polyglot_notebook": {
     "kernelName": "csharp"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Microsoft.Extensions.Configuration, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.Binder, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.CommandLine, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.EnvironmentVariables, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.ini, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.json, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.KeyPerFile, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.UserSecrets, 9.0.4</span></li><li><span>Microsoft.Extensions.Configuration.xml, 9.0.4</span></li><li><span>Microsoft.Extensions.DependencyInjection, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging.Configuration, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging.Console, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging.Debug, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging.EventSource, 9.0.4</span></li><li><span>Microsoft.Extensions.Options, 9.0.4</span></li><li><span>Microsoft.Extensions.Options.ConfigurationExtensions, 9.0.4</span></li><li><span>Microsoft.Extensions.Options.DataAnnotations, 9.0.4</span></li></ul></div></div>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "ename": "Error",
     "evalue": "(66,24): error CS0234: 命名空间“System.ComponentModel”中不存在类型或命名空间名“DataAnnotations”(是否缺少程序集引用?)",
     "output_type": "error",
     "traceback": [
      "(66,24): error CS0234: 命名空间“System.ComponentModel”中不存在类型或命名空间名“DataAnnotations”(是否缺少程序集引用?)"
     ]
    }
   ],
   "source": [
    "#r \"nuget:Microsoft.Extensions.DependencyInjection\"\n",
    "#r \"nuget:Microsoft.Extensions.Options\"\n",
    "#r \"nuget:Microsoft.Extensions.Options.DataAnnotations\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.Binder\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.ini\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.xml\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.json\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.KeyPerFile\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.UserSecrets\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.CommandLine\"\n",
    "#r \"nuget:Microsoft.Extensions.Configuration.EnvironmentVariables\"\n",
    "#r \"nuget:Microsoft.Extensions.Options.ConfigurationExtensions\"\n",
    "#r \"nuget:Microsoft.Extensions.Logging\"\n",
    "#r \"nuget:Microsoft.Extensions.Logging.Console\"\n",
    "#r \"nuget:Microsoft.Extensions.Logging.Debug\"\n",
    "#r \"nuget:Microsoft.Extensions.Logging.EventSource\"\n",
    "#r \"nuget:Microsoft.Extensions.Logging.Configuration\"\n",
    "\n",
    "global using Microsoft.Extensions.DependencyInjection;\n",
    "global using Microsoft.Extensions.Configuration;\n",
    "global using Microsoft.Extensions.Configuration.Ini;\n",
    "global using Microsoft.Extensions.Configuration.Xml;\n",
    "global using Microsoft.Extensions.Configuration.Memory;\n",
    "global using Microsoft.Extensions.Configuration.Json;\n",
    "global using Microsoft.Extensions.Configuration.CommandLine;\n",
    "global using Microsoft.Extensions.Configuration.EnvironmentVariables;\n",
    "global using Microsoft.Extensions.Options;\n",
    "global using Microsoft.Extensions.Logging;\n",
    "global using Microsoft.Extensions.Logging.Debug;\n",
    "global using Microsoft.Extensions.Logging.Console;\n",
    "global using Microsoft.Extensions.Logging.EventSource;\n",
    "global using Microsoft.Extensions.Logging.Configuration;\n",
    "\n",
    "//环境变量\n",
    "//Environment.SetEnvironmentVariable(\"Database:PSQL\", \"Host=localhost;Port=5432;Username=postgres;Password=psql-461400;Database=Study;\", EnvironmentVariableTarget.Process);\n",
    "\n",
    "//配置文件\n",
    "IConfigurationBuilder configBuilder = new ConfigurationBuilder();\n",
    "configBuilder\n",
    "    .SetBasePath(Environment.CurrentDirectory)\n",
    "    .AddJsonFile(\"config.json\",false,true)\n",
    "    .AddEnvironmentVariables()\n",
    "    .AddUserSecrets(\"PolyglotNotebooksStudy\",true)\n",
    "    .AddCommandLine(new string[]{})\n",
    ";\n",
    "\n",
    "public IConfiguration DataBaseConfig = configBuilder.Build();\n",
    "\n",
    "//DI\n",
    "ServiceCollection Services = new ServiceCollection();\n",
    "Services\n",
    "    .AddSingleton<IConfiguration>(DataBaseConfig)\n",
    "    .AddLogging(setup =>\n",
    "    {\n",
    "        setup.AddConfiguration();\n",
    "        setup.AddDebug();\n",
    "        setup.AddConsole();\n",
    "    })\n",
    "    ;\n",
    "public ServiceProvider SharedContainer = Services.BuildServiceProvider();\n",
    "\n",
    "public class DbConnectionString\n",
    "{\n",
    "    public string MsSqlConnectionString {get;set;}\n",
    "    public string MySQLConnectionString {get;set;}\n",
    "    public string PSQLConnectionString {get;set;}\n",
    "    public string SQLiteConnectionString {get;set;}\n",
    "    public string DuckDBConnectionString {get;set;}\n",
    "}\n",
    "\n",
    "///<summary>\n",
    "/// 数据库连接字符串\n",
    "///</summary>\n",
    "public DbConnectionString SharedDbConnect = new DbConnectionString()\n",
    "{\n",
    "    MsSqlConnectionString   = DataBaseConfig.GetValue<string>(\"Database:SQLServer\"),\n",
    "    MySQLConnectionString   = DataBaseConfig.GetValue<string>(\"Database:MySQL\"),\n",
    "    PSQLConnectionString    = DataBaseConfig.GetValue<string>(\"Database:PSQL\"),\n",
    "    SQLiteConnectionString  = DataBaseConfig.GetValue<string>(\"Database:SQLite\"),\n",
    "    DuckDBConnectionString  = DataBaseConfig.GetValue<string>(\"Database:DuckDB\"),\n",
    "};\n",
    "\n",
    "//SharedDbConnect.Display();\n",
    "\n",
    "public class Student\n",
    "{\n",
    "    public int Id {get;set;}\n",
    "\n",
    "    public string Name {get;set;}\n",
    "\n",
    "    public int Age {get;set;}\n",
    "}"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".NET (C#)",
   "language": "C#",
   "name": ".net-csharp"
  },
  "polyglot_notebook": {
   "kernelInfo": {
    "defaultKernelName": "csharp",
    "items": [
     {
      "aliases": [],
      "languageName": "csharp",
      "name": "csharp"
     }
    ]
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}