В приложении на основе Asp.Net Core MVC мы знаем, что Dependency Injection (DI) определен прямо в Startup классе в ConfigureServices метод следующим образом:
var connection = @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
И затем мы можем использовать этот 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), который содержит все необходимое для взаимодействия с базой данных бэкэнда.
- Таким образом, в нашем случае мы можем получить доступ к этой инъекции зависимостей в BLL следующим образом?
public class MyClassLib
{
private readonly BloggingContext _context;
public MyClassLib(BloggingContext context)
{
_context = context;
}
}
Кроме того, нам необходимо создать леса для существующей базы данных, и, как таковой, класс DbContext будет создан в проекте DAL.
OnConfiguring метод будет определен в этом созданном классе DbContext.Здесь строка подключения жестко запрограммирована в классе.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=.;Database=TestDB;user id=sa;password=abcxyz");
}
}
Но можем ли мы объявить строку подключения в нашем UI MVC-проекте в каком-то файле json и получить доступ к этой же строке подключения в DAL с помощью нашего класса DbContext?