Я борюсь с некоторыми понятиями в ASP.NET 5 (vNext).
Один из них - это подход Подход к зависимостям, используемый для конфигурации. Похоже, что я должен пройти параметр через стек. Возможно, я что-то недопонимаю или делаю неправильно.
Представьте, что у меня есть свойство config с именем "contactEmailAddress". Я буду использовать это свойство config для отправки электронной почты при размещении нового заказа. Учитывая этот сценарий, мой стек ASP.NET 5 будет выглядеть следующим образом:
Startup.cs
public class Startup
{
public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment environment)
{
var configuration = new Configuration().AddJsonFile("config.json");
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseErrorPage();
app.UseMvc(routes =>
{
routes.MapRoute("default",
"{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index" });
}
);
app.UseWelcomePage();
}
AppSettings.cs
public class AppSettings
{
public string ContactEmailAddress { get; set; }
}
config.json
{
"AppSettings": {
"ContactEmailAddress":"[email protected]"
}
}
OrderController.cs
[Route("orders")]
public class OrdersController : Controller
{
private IOptions<AppSettings> AppSettings { get; set; }
public OrdersController(IOptions<AppSettings> appSettings)
{
AppSettings = appSettings;
}
[HttpGet("new-order")]
public IActionResult OrderCreate()
{
var viewModel = new OrderViewModel();
return View(viewModel);
}
[HttpPost("new-order")]
public IActionResult OrderCreate(OrderViewModel viewModel)
{
return new HttpStatusCodeResult(200);
}
}
Order.cs
public class Order()
{
public void Save(IOptions<AppSettings> appSettings)
{
// Send email to address in appSettings
}
public static List<Order> FindAll(IOptions<AppSettings> appSettings)
{
// Send report email to address in appSettings
return new List<Order>();
}
}
Как показывает вышеприведенный пример, я пропускаю AppSettings
через весь стек. Это не кажется правильным. Чтобы я больше не беспокоился, этот подход не будет работать, если я попытаюсь использовать стороннюю библиотеку, которая должна получить доступ к настройкам конфигурации. Как сторонняя библиотека может получить доступ к настройкам конфигурации? Я что-то не понимаю? Есть ли лучший способ сделать это?