“选项”模式允许我创建包含配置值的选项对象,如此处所述:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.1
我需要IDesignTimeDbContextFactory实现中一个选项对象的值,以供EF在创建模型时使用。 (该配置部分中的值将用于数据播种,因此我在数据库上下文构造函数中添加了IOptions。)
由于我无权访问IServiceCollection(因为它是设计时间,就像运行“ dotnet ef migrations add”时一样),所以我需要有另一种方法将IConfigurationSection(代表我感兴趣的部分)转换为我的自定义选项课。
我可以知道如何在没有依赖注入的情况下做到这一点吗?
答案 0 :(得分:5)
您可以使用Bind(Configuration, object)
扩展方法对任何object
进行手动绑定。这是一个示例:
var myCustomOptions = new MyCustomOptions();
myConfigurationSection.Bind(myCustomOptions);
// Use myCustomOptions directly.
要包装为IOptions<T>
,可以使用Options.Create
,如下所示:
IOptions<MyCustomOptions> myOptions = Options.Create(myCustomOptions);
答案 1 :(得分:0)
我想您需要Bind方法:
def sout = new StringBuilder()
def serr = new StringBuilder()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(30000)
答案 2 :(得分:0)
ServiceCollectionContainerBuilderExtensions 使其在SoapCore中起作用
我的应用程序中的部分是这样的:
services.AddSingleton<IRESAdapterService>(new RESAdapterService(
new XController(
services.BuildServiceProvider().GetRequiredService<IOptions<XApiSettingsFromJsonClass>>(),
_xLogger
)));
也可以在完整性单元测试中使用
答案 3 :(得分:0)
您也可以使用
config.Get<MyCustomOptions>()
这是Microsoft.Extensions.Configuration命名空间的扩展方法。我在Assembly Microsoft.Extensions.Configuration.Binder,版本= 3.1.9.0中看到了它。也许,它也存在于早期版本中。这将为您提供Settings对象本身。然后您可以将其包装到IOptions中,如Krik在另一个答案中所示。