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.
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();
}
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; }
}
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ığı.
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.
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();
}
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; }
}
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ığı.
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.
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);
}
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; }
}
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ığı.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
ASP.NET Core geri bildirimi
ASP.NET Core, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
ASP.NET Core uygulamasında bağımlılık eklemeyi anlayın ve uygulayın. Bağımlılıkları yönetmek için ASP.NET Core'un yerleşik hizmet kapsayıcısını kullanın. Hizmetleri hizmet kapsayıcısıyla kaydedin.