ASP.NET Core'daki denetleyicilere bağımlılık ekleme
Shadi Alnamrouti ve Rick Anderson tarafından
ASP.NET Core MVC denetleyicileri, oluşturucular aracılığıyla bağımlılıkları açıkça istemektedir. ASP.NET Core, bağımlılık ekleme (DI) için yerleşik desteğe sahiptir. DI, uygulamaların test ve bakımlarını kolaylaştırır.
Örnek kodu görüntüleme veya indirme (indirme)
Oluşturucu ekleme
Hizmetler bir oluşturucu parametresi olarak eklenir ve çalışma zamanı hizmeti hizmet kapsayıcısından çözümler. Hizmetler genellikle arabirimler kullanılarak tanımlanır. Örneğin, geçerli saati gerektiren bir uygulamayı düşünün. Aşağıdaki arabirim hizmeti kullanıma sunar IDateTime
:
public interface IDateTime
{
DateTime Now { get; }
}
Aşağıdaki kod arabirimini IDateTime
uygular:
public class SystemDateTime : IDateTime
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
Hizmeti hizmet kapsayıcısına ekleyin:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.AddControllersWithViews();
}
hakkında AddSingletondaha fazla bilgi için bkz . DI hizmet ömrü.
Aşağıdaki kod, kullanıcıya günün saatine göre bir selamlama görüntüler:
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();
}
Uygulamayı çalıştırdığınızda saate göre bir ileti görüntülenir.
ile eylem ekleme FromServices
oluşturucu FromServicesAttribute eklemesi kullanmadan bir hizmeti doğrudan bir eylem yöntemine eklemeye olanak tanır:
public IActionResult About([FromServices] IDateTime dateTime)
{
return Content( $"Current server time: {dateTime.Now}");
}
ile eylem ekleme FromKeyedServices
Aşağıdaki kod, özniteliğini kullanarak DI kapsayıcısından anahtarlı hizmetlere nasıl erişilir gösterilmektedir [FromKeyedServices]
:
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");
}
}
Denetleyiciden erişim ayarları
Uygulama veya yapılandırma ayarlarına bir denetleyici içinden erişmek yaygın bir düzendir. ayarları yönetmek için tercih edilen yaklaşım, ASP.NET Core'daki Seçenekler düzeni bölümünde açıklanan seçenekler desenidir. Genel olarak, doğrudan bir denetleyiciye eklemeyin IConfiguration .
Seçenekleri temsil eden bir sınıf oluşturun. Örneğin:
public class SampleWebSettings
{
public string Title { get; set; }
public int Updates { get; set; }
}
Yapılandırma sınıfını hizmetler koleksiyonuna ekleyin:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.Configure<SampleWebSettings>(Configuration);
services.AddControllersWithViews();
}
Uygulamayı JSON biçimli bir dosyadan ayarları okuyacak şekilde yapılandırın:
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şağıdaki kod, hizmet kapsayıcısından ayarları istemektedir IOptions<SampleWebSettings>
ve bunları yönteminde Index
kullanır:
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();
}
}
Ek kaynaklar
- Denetleyicilerin bağımlılıklarını açıkça isteyerek kodu test etmeyi nasıl kolaylaştıracağınızı öğrenmek için bkz . ASP.NET Core'da test denetleyicisi mantığı.
- Anahtarlı hizmet bağımlılığı ekleme kapsayıcısı desteği
- Varsayılan bağımlılık ekleme kapsayıcısını bir üçüncü taraf uygulamasıyla değiştirin.
Shadi Alnamrouti, Rick Anderson ve Steve Smith tarafından
ASP.NET Core MVC denetleyicileri, oluşturucular aracılığıyla bağımlılıkları açıkça istemektedir. ASP.NET Core, bağımlılık ekleme (DI) için yerleşik desteğe sahiptir. DI, uygulamaların test ve bakımlarını kolaylaştırır.
Örnek kodu görüntüleme veya indirme (indirme)
Oluşturucu ekleme
Hizmetler bir oluşturucu parametresi olarak eklenir ve çalışma zamanı hizmeti hizmet kapsayıcısından çözümler. Hizmetler genellikle arabirimler kullanılarak tanımlanır. Örneğin, geçerli saati gerektiren bir uygulamayı düşünün. Aşağıdaki arabirim hizmeti kullanıma sunar IDateTime
:
public interface IDateTime
{
DateTime Now { get; }
}
Aşağıdaki kod arabirimini IDateTime
uygular:
public class SystemDateTime : IDateTime
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
Hizmeti hizmet kapsayıcısına ekleyin:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.AddControllersWithViews();
}
hakkında AddSingletondaha fazla bilgi için bkz . DI hizmet ömrü.
Aşağıdaki kod, kullanıcıya günün saatine göre bir selamlama görüntüler:
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();
}
Uygulamayı çalıştırdığınızda saate göre bir ileti görüntülenir.
ile eylem ekleme FromServices
oluşturucu FromServicesAttribute eklemesi kullanmadan bir hizmeti doğrudan bir eylem yöntemine eklemeye olanak tanır:
public IActionResult About([FromServices] IDateTime dateTime)
{
return Content( $"Current server time: {dateTime.Now}");
}
Denetleyiciden erişim ayarları
Uygulama veya yapılandırma ayarlarına bir denetleyici içinden erişmek yaygın bir düzendir. ayarları yönetmek için tercih edilen yaklaşım, ASP.NET Core'daki Seçenekler düzeni bölümünde açıklanan seçenekler desenidir. Genel olarak, doğrudan bir denetleyiciye eklemeyin IConfiguration .
Seçenekleri temsil eden bir sınıf oluşturun. Örneğin:
public class SampleWebSettings
{
public string Title { get; set; }
public int Updates { get; set; }
}
Yapılandırma sınıfını hizmetler koleksiyonuna ekleyin:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.Configure<SampleWebSettings>(Configuration);
services.AddControllersWithViews();
}
Uygulamayı JSON biçimli bir dosyadan ayarları okuyacak şekilde yapılandırın:
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şağıdaki kod, hizmet kapsayıcısından ayarları istemektedir IOptions<SampleWebSettings>
ve bunları yönteminde Index
kullanır:
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();
}
}
Ek kaynaklar
Denetleyicilerin bağımlılıklarını açıkça isteyerek kodu test etmeyi nasıl kolaylaştıracağınızı öğrenmek için bkz . ASP.NET Core'da test denetleyicisi mantığı.
Varsayılan bağımlılık ekleme kapsayıcısını bir üçüncü taraf uygulamasıyla değiştirin.
Shadi Namrouti, Rick Anderson ve Steve Smith
ASP.NET Core MVC denetleyicileri, oluşturucular aracılığıyla bağımlılıkları açıkça istemektedir. ASP.NET Core, bağımlılık ekleme (DI) için yerleşik desteğe sahiptir. DI, uygulamaların test ve bakımlarını kolaylaştırır.
Örnek kodu görüntüleme veya indirme (indirme)
Oluşturucu ekleme
Hizmetler bir oluşturucu parametresi olarak eklenir ve çalışma zamanı hizmeti hizmet kapsayıcısından çözümler. Hizmetler genellikle arabirimler kullanılarak tanımlanır. Örneğin, geçerli saati gerektiren bir uygulamayı düşünün. Aşağıdaki arabirim hizmeti kullanıma sunar IDateTime
:
public interface IDateTime
{
DateTime Now { get; }
}
Aşağıdaki kod arabirimini IDateTime
uygular:
public class SystemDateTime : IDateTime
{
public DateTime Now
{
get { return DateTime.Now; }
}
}
Hizmeti hizmet kapsayıcısına ekleyin:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
hakkında AddSingletondaha fazla bilgi için bkz . DI hizmet ömrü.
Aşağıdaki kod, kullanıcıya günün saatine göre bir selamlama görüntüler:
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();
}
Uygulamayı çalıştırdığınızda saate göre bir ileti görüntülenir.
ile eylem ekleme FromServices
oluşturucu FromServicesAttribute eklemesi kullanmadan bir hizmeti doğrudan bir eylem yöntemine eklemeye olanak tanır:
public IActionResult About([FromServices] IDateTime dateTime)
{
ViewData["Message"] = $"Current server time: {dateTime.Now}";
return View();
}
Denetleyiciden erişim ayarları
Uygulama veya yapılandırma ayarlarına bir denetleyici içinden erişmek yaygın bir düzendir. ayarları yönetmek için tercih edilen yaklaşım, ASP.NET Core'daki Seçenekler düzeni bölümünde açıklanan seçenekler desenidir. Genel olarak, doğrudan bir denetleyiciye eklemeyin IConfiguration .
Seçenekleri temsil eden bir sınıf oluşturun. Örneğin:
public class SampleWebSettings
{
public string Title { get; set; }
public int Updates { get; set; }
}
Yapılandırma sınıfını hizmetler koleksiyonuna ekleyin:
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IDateTime, SystemDateTime>();
services.Configure<SampleWebSettings>(Configuration);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Uygulamayı JSON biçimli bir dosyadan ayarları okuyacak şekilde yapılandırın:
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şağıdaki kod, hizmet kapsayıcısından ayarları istemektedir IOptions<SampleWebSettings>
ve bunları yönteminde Index
kullanır:
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();
}
}
Ek kaynaklar
Denetleyicilerin bağımlılıklarını açıkça isteyerek kodu test etmeyi nasıl kolaylaştıracağınızı öğrenmek için bkz . ASP.NET Core'da test denetleyicisi mantığı.
Varsayılan bağımlılık ekleme kapsayıcısını bir üçüncü taraf uygulamasıyla değiştirin.
ASP.NET Core