是否有与 IServiceCollection 的“TryAdd”方法等效的方法与 IOptions<T> 模式一起使用?

bub*_*ing 7 c# dependency-injection .net-core asp.net-core

我发现 .NET Core IOptions 模式(如下面的语法所示)非常有用。

services.Configure<MySettings>(configuration.GetSection("MySettings"));
Run Code Online (Sandbox Code Playgroud)

我还发现 TryAdd 方法有助于防止重复服务注册,如下所示:

services.TryAddTransient<IMyService, MyService>();
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人知道使用 IOptions 完成相同任务的任何技术,或者框架中是否内置了重复注册保护。换句话说,我正在寻找这样的东西:

services.TryConfigure<MySettings>(configuration.GetSection("MySettings"));
Run Code Online (Sandbox Code Playgroud)

Jor*_*tas 4

事实上,我也有同样的“问题”。我是这样解决的:

if (!services.Any(d => d.ServiceType == typeof(IConfigureOptions<MySettings>)))
{
    services.Configure<MySettings>(configSection);
}
Run Code Online (Sandbox Code Playgroud)

该解决方案基于Microsoft TryAdd 代码

提示:您可以为其创建扩展方法。