我正在努力学习.Net核心。
我有两个项目:
我的问题:
如何从appsettings.json传递连接字符串 到我的DLL
我在startup.cs配置中但我不知道如何使用它来访问我的appsettings.json
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
startup.cs中有 services.AddDbContext
services.AddDbContext(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")))
但我不想使用 services.AddDbContext ,因为它是一对实体框架,如果我必须更改为其他ORM,我必须更改 这段代码也是。
其他问题如何解密连接的责任 字符串。
a:webapi必须解密到连接字符串并传递给DLL (工作单位)
b:或工作单元必须解密连接字符串
在我有另一个项目(即桌面应用程序)的情况下如何 使用DLL(工作单元)我还要把连接 在桌面应用程序的appsettings中的字符串? (就如 那种重复? )
答案 0 :(得分:4)
我不想使用services.AddDbContext,因为它是一对实体框架
所以你需要做的是在你的EF项目中创建一个包含这个调用的扩展方法,这样EF对EF项目的依赖就像下面一样:
public static IServiceCollection AddDatabase<TContext>( this IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, string connectionString)
{
options.UseSqlServer(connectionString))
}
然后从您的启动代码中调用它:
services.AddDatabase(Configuration.GetConnectionString("DefaultConnection"));
这将解决您的依赖问题。
关于2:,请参阅此处:Encrypted Configuration in ASP.NET Core
关于3:然后其他项目需要调用AddDatabase
方法并传入连接字符串,因此EF项目永远不会知道从哪里获取它,总是提供它。
答案 1 :(得分:0)
你可以这样做:
public BooksContext(string connectionString): this(GetOptions(connectionString))
{ }
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}
答案 2 :(得分:0)
您可以像这样获取Stratup.cs文件。
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
private readonly IConfigurationRoot _appConfiguration;
private readonly IHostingEnvironment _hostingEnvironment;
public Startup(IHostingEnvironment env)
{
_hostingEnvironment = env;
_appConfiguration = env.GetAppConfiguration();
}
获取ConnectionString的代码:
string connectionString = _appConfiguration["ConnectionStrings:Default"];
<强> appsettings.json 强>
{
"ConnectionStrings": {
"Default": "Server=YourDBAddress; Database=YourDB; Trusted_Connection=True;"
}
...
}
对于其他观点,您可以参考@Jamie Rees的答案。