【问题标题】:Inject Settings from Class Library?从类库注入设置?
【发布时间】:2012-09-26 18:27:49
【问题描述】:

我正在构建一个类库,我想知道确保某些设置位于 app.config/webconfig 中的最佳方法是什么。

类库需要一个连接字符串和一个应用密钥。

我知道使用 nuget 您可以将设置注入到配置文件中,但我没有使用 nuget,所以想知道是否有人有任何想法,或者我只需要尝试捕获并查看这些设置是否在配置文件中?

【问题讨论】:

  • 如何检查设置是否存在,如果不存在则抛出异常。
  • 你可以把需要的设置变成构造函数参数。
  • @cadrell0 - 我在想这个,但我正在查看的代码(我想移动到库中)都是静态的(所以我想我可以有一个静态构造函数??)跨度>
  • “Yeah”实际上拼写为"yeah",而不是“ya”,除非你是意第绪语,或者试图表达对Captain Obvious的怀疑,例如“Ya think?”
  • @RobertHarvey 你可能是我的英雄。

标签: c# class-library


【解决方案1】:

您可以选择不同类型的解决方案:

  1. 您可以说向您提供所需信息是用户的责任。所以您只需确保当用户创建您的对象的实例时,它会为您提供所需的信息。对于类库来说,这是一个不错的选择。你不想告诉谁会使用你的代码,如何管理他的设置。假设他有他自己的方式来保存配置——为什么你必须绑定特定的配置类型(System.Configuration)。

  2. 如果您坚持使用 app.config/web.config,您可以只使用一个用于您的程序集,而不使用应用程序主程序。你可以使用ConfigurationManager.OpenExeConfiguration。要知道您的程序集从哪里运行,请使用Assembly.GetExecutingAssembly().Location。这样,您可以打开自己的配置文件,并确保在文档中用户必须更新设置。

  3. 你可以告诉他,他必须在他的 app.config/web.config 中指定配置信息,如果你正在寻找的密钥不存在则抛出异常......

【讨论】:

    【解决方案2】:
            //test settings...
            var a = System.Configuration.ConfigurationManager.AppSettings["myAppKey"];
            if (a == null)
            {
                Console.WriteLine("Application key does not exists!");
            }
            var b = System.Configuration.ConfigurationManager.ConnectionStrings["myConName"];
            if (b == null)
            {
                Console.WriteLine("Connection does not exists!");
            }
    

    【讨论】:

    • 我应该在构造函数还是每个方法中这样做?
    • 如果我们谈论的是 win 应用程序、控制台或库,构造函数将是一个好点。在 web 应用程序中,我将创建自己的类,该类继承自 Page。在这个类中,我将覆盖页面 init 并检查设置。所有需要此检查的页面都只需要从我的类继承即可。
    • 这么简单的逻辑在构造函数中可以+抛出异常?
    【解决方案3】:

    试试这个

    http://ninjectconfigurer.codeplex.com/

    清楚阅读问题后,上面的链接将不起作用,但以下解决方案可能会起作用

    无效或错误的设置实际上是编译时问题。您可以使用 msbuild 脚本来验证 app.config 文件是否具有强制设置。如果不是,那么编译时应该会引发错误。

    要读取配置文件的内容,请使用 Xmlread msbuild 任务 - Read Config Value in MSBuild Task

    若因缺少设置而失败,请使用如下所示的 Xmlread 任务的错误条件(尽管用于不同的任务),并将此任务附加到您的项目文件中,如图所示 -

    How to fail an MSBuild when content files are missing

    【讨论】:

    • 这是什么?它是如何工作的?请在您的回答中提供足够的信息,如果链接断开,它将是完整的。
    • 是的,我不明白它是什么。当我谈论注入时,我的意思是如果配置文件不存在,则自动将其写入配置文件。
    • 好的,这允许您根据构造函数参数名称将设置注入对象。被误解的问题以为你想摆脱魔术字符串并尝试捕捉。
    猜你喜欢
    • 2021-10-01
    • 2022-07-28
    • 2019-06-21
    • 2012-06-19
    • 2017-10-23
    • 2013-03-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多