【发布时间】:2020-04-05 05:05:50
【问题描述】:
我发现 .NET Core IOptions 模式(如以下语法所示)非常有用。
services.Configure<MySettings>(configuration.GetSection("MySettings"));
我还发现 TryAdd 方法有助于防止重复服务注册,如下所示:
services.TryAddTransient<IMyService, MyService>();
我想知道是否有人知道使用 IOptions 完成相同事情的任何技术,或者是否可能在框架中内置了重复注册保护。换句话说,我正在寻找这样的东西:
services.TryConfigure<MySettings>(configuration.GetSection("MySettings"));
【问题讨论】:
-
TryAdd 谈到了对比赛条件的担忧。或者通常是本课程的多任务处理重点。这可以包括从多个程序调用的函数(就像大多数 Windows API 函数的情况一样 - 除非您有一个锁定机制。您可以在并发集合、通道(修改后的队列)和类似情况中找到它。
-
Dictionary<TKey, TValue>上的任何TryParse和TryAdd都不是这样。特别是在键值结构上,它是尝试添加重复键时抛出异常的替代方法。 -
IServiceCollection TryAdd 方法的重点不是处理并发问题,容器不会在重复键上抛出异常。我假设 OP 正在尝试将“合理的默认”IOptions 注册添加为框架的一部分,并希望允许框架用户有选择地替换该注册。有关该模式的说明,请参阅 here。
标签: c# asp.net-core dependency-injection .net-core