如何在 Startup 中将选项模式与这些服务一起使用?
Posted
技术标签:
【中文标题】如何在 Startup 中将选项模式与这些服务一起使用?【英文标题】:How to use the options pattern with these services in Startup? 【发布时间】:2021-07-20 11:55:31 【问题描述】:在这个site 中解释了如何在 Startup.ConfigureServices() 中配置服务,但是如何将选项模式与使用 IServiceCollection 扩展的服务一起使用,例如 services.AddHttpClient() 或 services.AddDbContext()等。
例如,必须更改当前代码以使用选项模式:
services.AddDbContext<MyContext>(dbContextOptionsBuilder =>
dbContextOptionsBuilder.UseSqlServer(myOptionsInstance.AString));
使用 DI 的选项模式示例:
public void ConfigureServices(IServiceCollection services)
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
services.AddOptions<CookieAuthenticationOptions>(
CookieAuthenticationDefaults.AuthenticationScheme)
.Configure<IMyService>((options, myService) =>
options.LoginPath = myService.GetLoginPath();
);
services.AddRazorPages();
【问题讨论】:
您是问添加服务时如何提供配置值吗? @NoahStahl 是的,但不是像 services.AddSingleton在ConfigureServices
中,您可以将bind 选项类实例添加到Startup 的构造函数注入IConfiguration
中的值。例如:
var myOptions = Configuration.GetSection("MyConfig").Get<MyOptions>();
假设此绑定成功,myOptions
应该具有可以作为服务参数提供的当前配置值。
services.AddDbContext<MyContext>(dbContextOptionsBuilder =>
dbContextOptionsBuilder.UseSqlServer(myOptions.AString));
【讨论】:
我对 services.AddOptions().Configure() 方式更感兴趣,因为 MyOptions 由 DI 处理。 只有在您需要 OptionsBuilder 时才可以。如果你只是想获取初始化的配置值,绑定一个实例对我来说似乎很简单。 是的,我目前正在使用类似的绑定。是否不能将 AddOptions().Configure() 与这些 ICollectionServices 扩展一起使用? 不确定,但很好奇为什么需要这种特定方法? 带 DI 的选项模式以上是关于如何在 Startup 中将选项模式与这些服务一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 2 的同一服务中将一些硬编码数据与 API 一起使用?
如何在 SQL Server 2017 中将“生成脚本”与图形数据库对象一起使用?
如何在 Azure 应用服务中将 X509Certificate2 与 WCF 一起使用
在 SwiftUI 中将 NavigationButton 与服务器请求一起使用