【问题标题】:How to store configuration information in a .net Standard project如何在 .net 标准项目中存储配置信息
【发布时间】:2019-05-24 06:57:08
【问题描述】:

.net Standard 中似乎没有配置 app.config 或 web.config。 .net 标准类库项目中的 URL、ID 等设置可以存储在哪里。

该项目是自包含的,并从实施者那里提取信息。它是一个客户端,使用它的应用不需要配置它命中的端点。

【问题讨论】:

标签: .net .net-standard .net-standard-2.0


【解决方案1】:

您无法将 app.config 文件添加到类库项目中,除非您自己做出一些弯曲和扭曲。此外,将配置添加到您的库中也没有任何意义。而是将配置添加到正在使用您的库的项目中。

类库通常没有配置,因此它们可以适应调用项目提供的配置。

【讨论】:

  • 这是有道理的,但在我的例子中,类库包含业务逻辑和 URL 端点。它从实现者那里抽象出大量数据。
  • 您可以拥有一个 XML 文件并从中读取内容,或者具有从单独提供的 json 文件中读取资源的功能。你也可以在构建中添加它,但是一旦你创建了一个 nuget 包,那么适应性就会丧失。因此,只有自己将这些配置包装在模型中并为调用程序提供初始化它们的方法才有意义。
【解决方案2】:

将类库直接绑定到配置文件会导致难以在代码中覆盖该配置。许多在 .NET Framework 中创建的库都遇到了这个问题,当尝试使用现代依赖注入技术配置库时,这个问题变得最痛苦。 Microsoft 有意使这在 .NET Standard 中更难做到。

与其使用文件配置现代库,不如让配置通过对象构造函数传入,就像任何其他依赖项一样。如果您的配置 URL 具有逻辑默认值,那么您可以简单地将这些默认值放入您的配置对象中。

public class MyClassConfiguration
{
    public string Url { get; set; } = "https://example.com/some-default-location";
}

让你的库的使用者更容易理解这一点的一种方法是在对 DI 友好的构造函数注入类中创建业务逻辑,然后创建一些专门用于构造它们并提供默认值的外观类。完成此操作的一个好方法是使用 Mark Seemann 的 DI-Friendly Library post 中描述的 fluent 构建器模式。

var foo =
   new FooBuilder().WithUrl("https://example.com/override-the-default").Create();

然后由库的使用者决定是将配置保留为代码还是从配置文件中读取并将其传递给您的库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多