Jon*_*gel 2 c# entity-framework-core asp.net-core asp.net-core-2.0
选项模式使我能够创建包含配置值的选项对象,如下所述:https : //docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.1
我需要IDesignTimeDbContextFactory实现中一个选项对象的值,以供EF在创建模型时使用。(该配置部分中的值将用于数据播种,因此我向数据库上下文构造函数中添加了IOptions。)
由于我无权访问IServiceCollection(因为它是设计时间,就像运行“ dotnet ef迁移添加”时一样),所以我需要有另一种方法可以将IConfigurationSection(代表我感兴趣的部分)转换为自定义Options类。
我可以知道如何在没有依赖注入的情况下做到这一点吗?
您可以使用Bind(Configuration, object)扩展方法对任何对象执行手动绑定object。这是一个例子:
var myCustomOptions = new MyCustomOptions();
myConfigurationSection.Bind(myCustomOptions);
// Use myCustomOptions directly.
Run Code Online (Sandbox Code Playgroud)
要将其包装为IOptions<T>,可以使用Options.Create,如下所示:
IOptions<MyCustomOptions> myOptions = Options.Create(myCustomOptions);
Run Code Online (Sandbox Code Playgroud)
你也可以使用
config.Get<MyCustomOptions>()
Run Code Online (Sandbox Code Playgroud)
这是来自 Microsoft.Extensions.Configuration 命名空间的扩展方法。我在程序集 Microsoft.Extensions.Configuration.Binder 中看到它,版本=3.1.9.0。也许,它也存在于早期版本中。这会给你设置对象本身。然后你可以将它包装到 IOptions 中,正如 Krik 在另一个答案中所示。
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |