In un'applicazione Asp.Net Core MVC, sappiamo che Dipendenza Iniezione (DI) è definita proprio nella classe Startup sotto il metodo ConfigureServices in questo modo:
var connection = @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
E quindi possiamo usare questo DI in Controller tramite un costruttore come questo:
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());
}
}
Ma in un progetto reale per raggiungere la separazione delle preoccupazioni, facciamo uso di Business Logic Layer (BLL) e creiamo un progetto separato per esso. Allo stesso modo c'è anche un Data Abstraction Layer (DAL) che contiene tutto il materiale necessario per comunicare con il database di back-end.
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");
}
}
Ma possiamo dichiarare la stringa di connessione nel nostro progetto UI MVC in qualche file JSON e accedere alla stessa stringa di connessione in DAL con la nostra classe DbContext?
Immagino che tu possa dichiarare stringhe di connessione nel tuo file json del progetto MVC dell'interfaccia utente e accedere a questa stessa stringa di connessione in DAL, usando e iniettando IConfiguration
nel costruttore (simile a questo ).
Ma nota che non può essere fatto per CreateDbContext
.
Se vuoi usarlo per aggiungere migrazioni al tuo DAL, devi in qualche modo sottolineare il progetto di avvio e il progetto di migrazione, come illustrato in questa risposta .