从类库中注入设置?

时间:2012-09-26 18:27:49

标签: c# class-library

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

类库需要一个连接字符串和一个app键。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

        //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!");
        }