【问题标题】:What is the recommended pattern for .NET standard libraries using appsettings and IOptions interface?使用 appsettings 和 IOptions 接口的 .NET 标准库的推荐模式是什么?
【发布时间】:2018-07-06 02:51:52
【问题描述】:

我正在努力为我正在制作的网络库提出正确的设计。该库是作为 .NET 标准项目编写的,它需要通过 IOptions 进行配置(期望一些可执行文件来提供这些依赖项)

我正在阅读this answer,这是我一直遵循的指南。然而,我的困惑是某些应用程序应该如何使用该库。

例如,我有一个名为Packet.cs 的类需要一些配置。

public class Packet {
    public Packet(int maxSize) {
         ...
    }
}

假设maxSize 是可以通过appsettings.js 配置的东西。我写了另一个名为 NetworkService.cs 的类,它采用 IOptions

public class NetworkService {
    public NetworkService(IOptions<Settings> settings) {
         // save the settings
    }

    public Packet NewPacket() {
        return new Packet(settings.maxSize);
    }
}

现在,在这一点上,我是否假设任何想要使用我的库的东西都必须通过NetworkService,因为它是唯一具有设置的类?这是推荐的设计吗,我只有一个接口到整个库,所有调用都必须经过它?

【问题讨论】:

  • 我不太清楚这种方法会出现什么问题。你能添加一些例子来说明你不喜欢它吗?
  • 我猜你正在寻找单例模式
  • 否 - 任何想要使用您的库的东西都需要包含 Options 库并在其类构造函数中包含 IOptions ,就像您在 NetworkService 构造函数中一样。我还将向您的网络库添加一个 ServiceCollectionExtensions 类,该类带有一个名为 ConfigureNetworking() 的方法或任何您调用库的方法 - 您将在其中将您的 Settings 对象绑定到 Configuration ==> services.Configure(Configuration.GetSection( "YourNetworkSettingsSection"))
  • 只是为了完整 - 添加到我之前的评论 - 应用程序 Startup.ConfigureServices 应该调用您的 ConfigureNetworking() 方法(例如 services.ConfigureNetworking(Configuration)。
  • @mdebeus 谢谢你的意见。我想你指的是asp.net?我正在编写一个不包含Startup 类的.NET 标准库。但是,我确实写了一篇类似的文章,基本上就像你在评论中提到的那样工作。

标签: c# .net


【解决方案1】:

如果你问是否必须使用NetworkService 来创建Packet 对象,那么答案是肯定的,它实际上是工厂模式的实现。

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2010-11-02
    • 2015-06-22
    • 2017-05-27
    • 2011-01-26
    相关资源
    最近更新 更多