大多数情况,我们开发的程序中都含有很多个类库和文件夹,有时候,我们会遇到程序中的类库需要获取配置文件的信息的情况。
像dapper 中需要使用连接字符串的时候,那么我们一直从主程序中传值这是个不好的方式,所以我特地百度了好久,大部分都不是很完美,
所以今天我们来介绍的就是一种很方便的方式了。
首先我们新建一个储存数据的类:
public class AppSetting { public string ConnectionString{ get; set; } }
我这里是获取连接字符串,所以就有一个连接字符串的属性。
然后我们可以新建一个公共类,然后通过属性注入获取环境配置,像Development 的appsettings,再进入到appsettings.Development.json获取数据:
public class ConfigurationHelper { public IConfiguration config { get; set; } public ConfigurationHelper() { IHostingEnvironment env = MyServiceProvider.ServiceProvider.GetRequiredService<IHostingEnvironment>(); config = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables() .Build(); } public T GetAppSettings<T>(string key) where T : class, new() { var appconfig = new ServiceCollection() .AddOptions() .Configure<T>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<T>>() .Value; return appconfig; } }
这里GetAppSettings方法是泛型方法,所以你可以随意新建储存数据的类。
然后就是使用它:这里是因为dapper要使用连接字符串:
public class DapperHelper { public static IDbConnection GetConnection() { string connection = new ConfigurationHelper().GetAppSettings<AppSetting>("ConnectionStrings").ConnectionString;
IDbConnection conn = new MySqlConnection(connection);
conn.Open();
return conn;
}
}
其实这里还需要注意我们需要引用一些nuget包:
到这里就很完美啦,结束。