Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Shadi Alnamrouti és Rick Anderson
ASP.NET Alapvető MVC-vezérlők kifejezetten konstruktorokon keresztül kérnek függőségeket. ASP.NET Core beépített támogatást nyújt a függőséginjektáláshoz (DI). A DI megkönnyíti az alkalmazások tesztelését és karbantartását.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Konstruktor injektálás
A rendszer konstruktorparaméterként adja hozzá a szolgáltatásokat, és a futtatókörnyezet feloldja a szolgáltatást a szolgáltatástárolóból. A szolgáltatások általában interfészek használatával vannak definiálva. Vegyük például azt az alkalmazást, amely az aktuális időt igényli. A következő felület teszi elérhetővé a IDateTime szolgáltatást:
public interface IDateTime
{
DateTime Now { get; }
}
A következő kód implementálja az interfészt IDateTime :
public class SystemDateTime : IDateTime
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
Adja hozzá a szolgáltatást a szolgáltatástárolóhoz:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.AddControllersWithViews();
}
További információkért AddSingletonlásd a DI szolgáltatás élettartamát.
Az alábbi kód a nap időpontja alapján jeleníti meg a felhasználó üdvözletét:
public class HomeController : Controller
{
private readonly IDateTime _dateTime;
public HomeController(IDateTime dateTime)
{
_dateTime = dateTime;
}
public IActionResult Index()
{
var serverTime = _dateTime.Now;
if (serverTime.Hour < 12)
{
ViewData["Message"] = "It's morning here - Good Morning!";
}
else if (serverTime.Hour < 17)
{
ViewData["Message"] = "It's afternoon here - Good Afternoon!";
}
else
{
ViewData["Message"] = "It's evening here - Good Evening!";
}
return View();
}
Futtassa az alkalmazást, és az idő alapján megjelenik egy üzenet.
Műveletinjektálás a FromServices
Ez FromServicesAttribute lehetővé teszi a szolgáltatás közvetlen injektálását egy műveleti módszerbe konstruktorinjektálás nélkül:
public IActionResult About([FromServices] IDateTime dateTime)
{
return Content( $"Current server time: {dateTime.Now}");
}
Műveletinjektálás a FromKeyedServices
Az alábbi kód bemutatja, hogyan érheti el a kulcsos szolgáltatásokat a DI-tárolóból az [FromKeyedServices] attribútum használatával:
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddKeyedSingleton<ICache, BigCache>("big");
builder.Services.AddKeyedSingleton<ICache, SmallCache>("small");
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
public interface ICache
{
object Get(string key);
}
public class BigCache : ICache
{
public object Get(string key) => $"Resolving {key} from big cache.";
}
public class SmallCache : ICache
{
public object Get(string key) => $"Resolving {key} from small cache.";
}
[ApiController]
[Route("/cache")]
public class CustomServicesApiController : Controller
{
[HttpGet("big")]
public ActionResult<object> GetBigCache([FromKeyedServices("big")] ICache cache)
{
return cache.Get("data-mvc");
}
[HttpGet("small")]
public ActionResult<object> GetSmallCache([FromKeyedServices("small")] ICache cache)
{
return cache.Get("data-mvc");
}
}
Hozzáférés-beállítások egy vezérlőtől
Az alkalmazás- vagy konfigurációs beállítások elérése a vezérlőn belül gyakori minta. A beállítások kezelésének előnyben részesített módszere az ASP.NET Core Beállítások mintájában leírt beállításminta. Általában ne szúrjon be IConfiguration közvetlenül vezérlőbe.
Hozzon létre egy osztályt, amely a beállításokat jelöli. Például:
public class SampleWebSettings
{
public string Title { get; set; }
public int Updates { get; set; }
}
Adja hozzá a konfigurációs osztályt a szolgáltatásgyűjteményhez:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.Configure<SampleWebSettings>(Configuration);
services.AddControllersWithViews();
}
Konfigurálja az alkalmazást, hogy beolvassa a beállításokat egy JSON-formátumú fájlból:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("samplewebsettings.json",
optional: false,
reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
A következő kód a szolgáltatástárolótól kéri le a IOptions<SampleWebSettings> beállításokat, és a metódusban használja őket Index :
public class SettingsController : Controller
{
private readonly SampleWebSettings _settings;
public SettingsController(IOptions<SampleWebSettings> settingsOptions)
{
_settings = settingsOptions.Value;
}
public IActionResult Index()
{
ViewData["Title"] = _settings.Title;
ViewData["Updates"] = _settings.Updates;
return View();
}
}
További erőforrások
- A ASP.NET Core-ban található vezérlőlogika segítségével megtudhatja, hogyan teheti egyszerűbbé a kód tesztelését a vezérlők függőségeinek explicit kérésével.
- kulcsalapú szolgáltatásfüggőség-injektálási tároló támogatása
- Cserélje le az alapértelmezett függőséginjektálási tárolót egy harmadik féltől származó implementációra.
Shadi Alnamrouti, Rick Anderson és Steve Smith
ASP.NET Alapvető MVC-vezérlők kifejezetten konstruktorokon keresztül kérnek függőségeket. ASP.NET Core beépített támogatást nyújt a függőséginjektáláshoz (DI). A DI megkönnyíti az alkalmazások tesztelését és karbantartását.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Konstruktor injektálás
A rendszer konstruktorparaméterként adja hozzá a szolgáltatásokat, és a futtatókörnyezet feloldja a szolgáltatást a szolgáltatástárolóból. A szolgáltatások általában interfészek használatával vannak definiálva. Vegyük például azt az alkalmazást, amely az aktuális időt igényli. A következő felület teszi elérhetővé a IDateTime szolgáltatást:
public interface IDateTime
{
DateTime Now { get; }
}
A következő kód implementálja az interfészt IDateTime :
public class SystemDateTime : IDateTime
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
Adja hozzá a szolgáltatást a szolgáltatástárolóhoz:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.AddControllersWithViews();
}
További információkért AddSingletonlásd a DI szolgáltatás élettartamát.
Az alábbi kód a nap időpontja alapján jeleníti meg a felhasználó üdvözletét:
public class HomeController : Controller
{
private readonly IDateTime _dateTime;
public HomeController(IDateTime dateTime)
{
_dateTime = dateTime;
}
public IActionResult Index()
{
var serverTime = _dateTime.Now;
if (serverTime.Hour < 12)
{
ViewData["Message"] = "It's morning here - Good Morning!";
}
else if (serverTime.Hour < 17)
{
ViewData["Message"] = "It's afternoon here - Good Afternoon!";
}
else
{
ViewData["Message"] = "It's evening here - Good Evening!";
}
return View();
}
Futtassa az alkalmazást, és az idő alapján megjelenik egy üzenet.
Műveletinjektálás a FromServices
Ez FromServicesAttribute lehetővé teszi a szolgáltatás közvetlen injektálását egy műveleti módszerbe konstruktorinjektálás nélkül:
public IActionResult About([FromServices] IDateTime dateTime)
{
return Content( $"Current server time: {dateTime.Now}");
}
Hozzáférés-beállítások egy vezérlőtől
Az alkalmazás- vagy konfigurációs beállítások elérése a vezérlőn belül gyakori minta. A beállítások kezelésének előnyben részesített módszere az ASP.NET Core Beállítások mintájában leírt beállításminta. Általában ne szúrjon be IConfiguration közvetlenül vezérlőbe.
Hozzon létre egy osztályt, amely a beállításokat jelöli. Például:
public class SampleWebSettings
{
public string Title { get; set; }
public int Updates { get; set; }
}
Adja hozzá a konfigurációs osztályt a szolgáltatásgyűjteményhez:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.Configure<SampleWebSettings>(Configuration);
services.AddControllersWithViews();
}
Konfigurálja az alkalmazást, hogy beolvassa a beállításokat egy JSON-formátumú fájlból:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("samplewebsettings.json",
optional: false,
reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
A következő kód a szolgáltatástárolótól kéri le a IOptions<SampleWebSettings> beállításokat, és a metódusban használja őket Index :
public class SettingsController : Controller
{
private readonly SampleWebSettings _settings;
public SettingsController(IOptions<SampleWebSettings> settingsOptions)
{
_settings = settingsOptions.Value;
}
public IActionResult Index()
{
ViewData["Title"] = _settings.Title;
ViewData["Updates"] = _settings.Updates;
return View();
}
}
További erőforrások
A ASP.NET Core-ban található vezérlőlogika segítségével megtudhatja, hogyan teheti egyszerűbbé a kód tesztelését a vezérlők függőségeinek explicit kérésével.
ASP.NET Alapvető MVC-vezérlők kifejezetten konstruktorokon keresztül kérnek függőségeket. ASP.NET Core beépített támogatást nyújt a függőséginjektáláshoz (DI). A DI megkönnyíti az alkalmazások tesztelését és karbantartását.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Konstruktor injektálás
A rendszer konstruktorparaméterként adja hozzá a szolgáltatásokat, és a futtatókörnyezet feloldja a szolgáltatást a szolgáltatástárolóból. A szolgáltatások általában interfészek használatával vannak definiálva. Vegyük például azt az alkalmazást, amely az aktuális időt igényli. A következő felület teszi elérhetővé a IDateTime szolgáltatást:
public interface IDateTime
{
DateTime Now { get; }
}
A következő kód implementálja az interfészt IDateTime :
public class SystemDateTime : IDateTime
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
Adja hozzá a szolgáltatást a szolgáltatástárolóhoz:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
További információkért AddSingletonlásd a DI szolgáltatás élettartamát.
Az alábbi kód a nap időpontja alapján jeleníti meg a felhasználó üdvözletét:
public class HomeController : Controller
{
private readonly IDateTime _dateTime;
public HomeController(IDateTime dateTime)
{
_dateTime = dateTime;
}
public IActionResult Index()
{
var serverTime = _dateTime.Now;
if (serverTime.Hour < 12)
{
ViewData["Message"] = "It's morning here - Good Morning!";
}
else if (serverTime.Hour < 17)
{
ViewData["Message"] = "It's afternoon here - Good Afternoon!";
}
else
{
ViewData["Message"] = "It's evening here - Good Evening!";
}
return View();
}
Futtassa az alkalmazást, és az idő alapján megjelenik egy üzenet.
Műveletinjektálás a FromServices
Ez FromServicesAttribute lehetővé teszi a szolgáltatás közvetlen injektálását egy műveleti módszerbe konstruktorinjektálás nélkül:
public IActionResult About([FromServices] IDateTime dateTime)
{
ViewData["Message"] = $"Current server time: {dateTime.Now}";
return View();
}
Hozzáférés-beállítások egy vezérlőtől
Az alkalmazás- vagy konfigurációs beállítások elérése a vezérlőn belül gyakori minta. A beállítások kezelésének előnyben részesített módszere az ASP.NET Core Beállítások mintájában leírt beállításminta. Általában ne szúrjon be IConfiguration közvetlenül vezérlőbe.
Hozzon létre egy osztályt, amely a beállításokat jelöli. Például:
public class SampleWebSettings
{
public string Title { get; set; }
public int Updates { get; set; }
}
Adja hozzá a konfigurációs osztályt a szolgáltatásgyűjteményhez:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.Configure<SampleWebSettings>(Configuration);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Konfigurálja az alkalmazást, hogy beolvassa a beállításokat egy JSON-formátumú fájlból:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddJsonFile("samplewebsettings.json",
optional: false, // File is not optional.
reloadOnChange: false);
})
.UseStartup<Startup>();
}
A következő kód a szolgáltatástárolótól kéri le a IOptions<SampleWebSettings> beállításokat, és a metódusban használja őket Index :
public class SettingsController : Controller
{
private readonly SampleWebSettings _settings;
public SettingsController(IOptions<SampleWebSettings> settingsOptions)
{
_settings = settingsOptions.Value;
}
public IActionResult Index()
{
ViewData["Title"] = _settings.Title;
ViewData["Updates"] = _settings.Updates;
return View();
}
}
További erőforrások
A ASP.NET Core-ban található vezérlőlogika segítségével megtudhatja, hogyan teheti egyszerűbbé a kód tesztelését a vezérlők függőségeinek explicit kérésével.