2013-04-21 61 views
3

我正在开发将由Windows Store和WP8应用程序使用的PCL。这个库需要一些配置,例如远程服务网址。我想把它们放到app.config中并使用ConfigurationManager检索它们,但System.Configuration在PCL中似乎不可用。便携式类库中的配置值

+1

正常的库访问'ConfigurationManager'看起来有点可疑。这不应该是应用程序的责任,然后应用程序将配置对象传递给库? – CodesInChaos 2013-04-21 12:23:34

回答

2

我会创建一个配置类。在最简单的情况下它可能看起来像:

public class MyLibraryConfig 
{ 
    public string RemoteServiceUrl{get;set;} 
} 

然后通过这个类的一个实例,通过标准的依赖注入技术库。例如,将它传递给构造函数并将其存储在一个字段中。然后,应用程序有责任从文件中读取配置ConfigurationManager等。

IMO这是更好的设计,我会用它来查询配置管理器,即使在我可以访问ConfigurationManager的库中。否则,您会强制应用程序使用单个配置并使用特定的配置机制。


你也可以使用一个接口或一个不可变类。这稍微复杂一些,但IMO更好的设计。

+0

你能证明为什么在库类中使用应用程序设置是件坏事吗?这种配置机制是不是被设计用于这种方式? – filip 2013-04-21 12:55:55

+0

决定使用哪种配置是应用程序的责任,而不是库的责任。在应用程序的启动代码中访问'ConfigurationManager'没有问题,但是在库中访问它不是。避免访问库中的'ConfigurationManager'是避免单例和全局变量的特例。如果你想在一个单独的过程中使用两个实例库?你如何提供测试配置?如果图书馆的使用者使用不同的配置机制呢? – CodesInChaos 2013-04-21 12:59:59

+0

AppSettings顾名思义就是应用程序特定设置的集合。库代表可以被不同应用程序重用的代码,这些应用程序可能有不同的分组方式。当然,如果您正在使用可移植类库,则应该比使用AppSettings更加普遍地访问配置信息。 – 2013-04-24 12:39:43