我正在使用ASP.NET Core MVC 2.2,需要在Startup.cs的ConfigureServices方法中获取网站的当前URL。
这是因为URL传递到了我在该方法中配置的库的构造函数中。
services.AddScoped<IEmailProvider>(ep => new SendGridEmailProvider(Configuration["Email:SendGridApiKey"],
Configuration.GetValue<bool>("Email:TestMode", true),
Configuration["Email:TestModeEmailAddresses"],
Configuration["ENVIRONMENT"],
"THIS SHOULD BE THE APPLICATION URL"));
我非常确定我不能在ConfigureServices中使用标准的依赖项注入技术,因为这是所有依赖项注入实际上都已设置的地方!
是否可以通过某种方式获取请求的当前URL?我只需要基本网址,如www.site.com。
答案 0 :(得分:0)
您可以将HttpContext
添加到DI容器中:
services.AddHttpContextAccessor();
然后您可以上一堂课来举行您的EmailOptions
:
public class EmailOptions
{
public string ApiKey { get; set; }
public bool TestMode { get; set; }
public string TestModeEmail { get; set; }
public string Environment { get; set; }
public string Url { get; set; }
}
然后添加一个类来配置您的EmailOptions
:
public class ConfigureEmailOptions : IConfigureOptions<EmailOptions>
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IConfiguration _configuration;
private readonly IHostingEnvironment _environment;
public ConfigureEmailOptions(
IHttpContextAccessor httpContextAccessor,
IConfiguration configuration,
IHostingEnvironment environment)
{
_httpContextAccessor = httpContextAccessor;
_configuration = configuration;
_environment = environment;
}
public void Configure(EmailOptions options)
{
options.ApiKey = _configuration["Email:SendGridApiKey"];
options.TestMode = _configuration.GetValue<bool>("Email:TestMode", true);
options.TestModeEmail = _configuration["Email:TestModeEmailAddresses"];
options.Environment = _environment.EnvironmentName;
options.Url = _httpContextAccessor.HttpContext.Request.Scheme + "://" + _httpContextAccessor.HttpContext.Request.Host + _httpContextAccessor.HttpContext.Request.PathBase;
}
}
然后将您的EmailOptions
添加到DI容器中:
services.AddTransient<IConfigureOptions<EmailOptions>, ConfigureEmailOptions>();
services.Configure<EmailOptions>(Configuration);
此后,您应该可以将IOptions<EmailOptions>
注入您的SendGridEmailProvider
中。 (您也可以将IHttpContextAccessor
直接注入到SendGridEmailProvider
中,但这将使耦合更加紧密。)