当前位置:首页 > Web开发 > 正文

在调用构造函数创建一个JsonFileConfigureOptionsTOptions对象的时候

2024-03-31 Web开发

由于Options模型涉及的核心东西最终都注册为相应的处事,所以从原则上讲这些东西都是可以定制的,下面供给几个这样的实例。由于Options模型供给了针对配置系统的集成,所以可以给与配置文件的形式来供给原始的Options数据,可以直接给与反序列化的方法将配置文件的内容转换成Options东西。

一、使用JSON文件供给Options数据

在介绍IConfigureOptions扩展的实现之前,下面先演示如安在应用中使用它。首先在演示实例中界说一个Options类型。简单起见,我们沿用前面使用的包罗两个成员的FoobarOptions类型,从而实现IEquatable<FoobarOptions>接口。最终绑定生成的是一个FakeOptions东西,为了演示针对复合类型、数组、调集和字典类型的绑定,可以为其界说相应的属性成员。

public class FakeOptions { public FoobarOptions Foobar { get; set; } public FoobarOptions[] Array { get; set; } public IList<FoobarOptions> List { get; set; } public IDictionary<string, FoobarOptions> Dictionary { get; set; } } public class FoobarOptions : IEquatable<FoobarOptions> { public int Foo { get; set; } public int Bar { get; set; } public FoobarOptions() { } public FoobarOptions(int foo, int bar) { Foo = foo; Bar = bar; } public override string ToString() => $"Foo:{Foo}, Bar:{Bar}"; public bool Equals(FoobarOptions other) => this.Foo =http://www.mamicode.com/= other?.Foo && this.Bar =http://www.mamicode.com/= other?.Bar; }

可以在项目根目录添加一个JSON文件(定名为fakeoptions.json),如下所示的代码片段暗示该文件的内容,可以看出文件的格局与FakeOptions类型的数据成员是兼容的,也就是说,这个文件的内容能够被反序列化成一个FakeOptions东西。

{ "Foobar": { "Foo": 1, "Bar": 1 }, "Array": [{ "Foo": 1, "Bar": 1 }, { "Foo": 2, "Bar": 2 }, { "Foo": 3, "Bar": 3 }], "List": [{ "Foo": 1, "Bar": 1 }, { "Foo": 2, "Bar": 2 }, { "Foo": 3, "Bar": 3 }], "Dictionary": { "1": { "Foo": 1, "Bar": 1 }, "2": { "Foo": 2, "Bar": 2 }, "3": { "Foo": 3, "Bar": 3 } } }

下面凭据Options模式直接读取该配置文件,并将文件内容绑定为一个FakeOptions东西。如下面的代码片段所示,在挪用IServiceCollection接口的AddOptions扩展要领之后,我们挪用了另一个自界说的Configure<FakeOptions>扩展要领,该要领的参数暗示承载原始Options数据的JSON文件的路径。这个演示措施供给的一系列调试断言表白:最终获取的FakeOptions东西与原始的JSON文件具有一致的内容。(S710)

class Program { static void Main() { var foobar1 = new FoobarOptions(1, 1); var foobar2 = new FoobarOptions(2, 2); var foobar3 = new FoobarOptions(3, 3); var options = new ServiceCollection() .AddOptions() .Configure<FakeOptions>("fakeoptions.json") .BuildServiceProvider() .GetRequiredService<IOptions<FakeOptions>>() .Value; Debug.Assert(options.Foobar.Equals(foobar1)); Debug.Assert(options.Array[0].Equals(foobar1)); Debug.Assert(options.Array[1].Equals(foobar2)); Debug.Assert(options.Array[2].Equals(foobar3)); Debug.Assert(options.List[0].Equals(foobar1)); Debug.Assert(options.List[1].Equals(foobar2)); Debug.Assert(options.List[2].Equals(foobar3)); Debug.Assert(options.Dictionary["1"].Equals(foobar1)); Debug.Assert(options.Dictionary["2"].Equals(foobar2)); Debug.Assert(options.Dictionary["3"].Equals(foobar3)); } }

二、JsonFileConfigureOptions<TOptions>

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31374.html