在基于Asp.Net Core MVC的应用程序中,我们知道依赖注入(DI)是在 Startup 类中的 ConfigureServices 方法下定义的,如下所示:
var connection = @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
然后我们可以像这样通过构造函数在Controller中使用此DI:
public class BlogsController : Controller
{
private readonly BloggingContext _context;
public BlogsController(BloggingContext context)
{
_context = context;
}
// GET: Blogs
public async Task<IActionResult> Index()
{
return View(await _context.Blog.ToListAsync());
}
}
但是在一个真实的项目中,为了实现关注点的分离,我们利用业务逻辑层(BLL)并为此创建了一个单独的项目。同样,还有一个数据抽象层(DAL),其中包含与后端数据库进行通信所需的所有内容。
public class MyClassLib
{
private readonly BloggingContext _context;
public MyClassLib(BloggingContext context)
{
_context = context;
}
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=.;Database=TestDB;user id=sa;password=abcxyz");
}
}
但是我们可以在一些json文件中的UI MVC项目中声明Connection字符串,并通过DbContext类在DAL中访问相同的连接字符串吗?
答案 0 :(得分:0)
在Startup.cs类中,您可以找到带有IConfiguration参数的ctor。您可以读取json并使用Get <>方法转换为对象。您必须添加 Microsoft.Extensions.Configuration 程序包才能使用此扩展方法。
以最简单的方式,当您读取连接时,可以将其设置为静态类属性。因此,就像过去一样,我创建了 ConfigurationManager 类。
public Startup(IConfiguration configuration)
{
Configuration = configuration;
ConfigurationManager.ConnectionStrings = Configuration.GetSection("ConnectionStrings").Get<Dictionary<string, string>>();
}
ConfigurationManager静态类:
public static class ConfigurationManager
{
public static Dictionary<string, string> ConnectionStrings { get; set; }
}
现在,我们有了一个带有连接的ConfigurationManager对象,可以在任何需要的地方使用它。让我们在您的 OnConfiguring 方法中调用它:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings ["connectionStringName"]);
}
}
如果您想知道appSettings.json文件:
{
"ConnectionStrings": {
"yourConnectionName": "Data Source=ConnectionStrings goes here",
}
}
答案 1 :(得分:0)
我猜想您可以在UI MVC项目json文件中声明连接字符串,并在构造函数中使用和注入IConfiguration
(类似于this)在DAL中访问相同的连接字符串。
但是请注意,它可以not be done for CreateDbContext
。
如果要使用它向DAL中添加迁移,则必须以某种方式指出启动项目和迁移项目,如this answer所示。