自定义ASP.NET Core选项应该实现IOptions<&gt ;?

时间:2017-05-26 08:52:23

标签: asp.net-core

在浏览ASP.NET Core配置的官方文档时,我们可以找到以下示例。这在其他样品中也占主导地位。

public class MyOptions
{
    public MyOptions()
    {
        // Set default value.
        Option1 = "value1_from_ctor";
    }
    public string Option1 { get; set; }
    public int Option2 { get; set; } = 5;
}

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration

我正在浏览ASP.NET Core Caching repo,并注意到微软团队的工作方式略有不同。

public class MemoryCacheOptions : IOptions<MemoryCacheOptions>
{
    // removed stuff

    MemoryCacheOptions IOptions<MemoryCacheOptions>.Value
    {
        get { return this; }
    }
} 

https://github.com/aspnet/Caching/blob/dev/src/Microsoft.Extensions.Caching.Memory/MemoryCacheOptions.cs

实施IOptions&lt;&gt ;?有什么好处?它给我们带来了什么样的“魔力”?

2 个答案:

答案 0 :(得分:0)

不,没有必要实现该接口。据我所知,它没有提供任何价值。该类中的大多数代码都相当陈旧(2 - 3年),因此它可能只是早期选项实现中的剩余部分。事实上,我猜它可以安全地移除。

答案 1 :(得分:0)

在ASP.NET Core github上发布了问题并得到了其中一个开发人员的回答。通过实施IOptions&lt;&gt;,您可以更轻松地在单元测试中使用它,而无需使用Options基础结构。