从单独的类库访问web.config?

我正在寻找一种实现以下目标的好方法:

我有一个Web应用程序(MVC 3),它有一个单独的类库,其中包含我正在制作的CMS的后端逻辑。 此CMS使用NHibernate连接到数据库。 我希望用户能够在他们的web.config文件中配置连接字符串(最终甚至是数据库的味道)。

我正在寻找的是从web.config文件获取连接字符串的好方法,即使DLL是完全独立的。 这可能吗? 我是否必须以某种方式将我的连接字符串传递给我的类库? 或者我可以在应用程序运行时访问它吗?

如果我必须在我的Web应用程序中创建一些代码以将连接字符串传递给我的类库,我怎样才能使这段代码尽可能便携,所以我不必再为我的下一个webapp写它?

非常感谢您的任何想法。

您可以从网站将连接字符串传递给类库中的类。

这是一个比尝试直接从配置文件中获取信息更好的选择,否则您将依赖于使用完全正确的密钥存在的配置文件(使得测试类更难)。

有关直接访问配置的参数,请参阅此博客文章 (这是非常常见的,但不是最佳实践)。

您可以从类库中访问System.Configuration.ConfigurationManager 。 这将使您可以访问AppSettings和ConnectionStrings。

您可以使用ConfigurationManager类访问web.config或app.config文件中的项目。 但是,在类库中,请务必从使用者(最好在构造函数中)中获取任何appSettings和/或connectionString设置的键名。 这避免了您选择消费者已在其他地方使用的密钥名称的问题。

我与我参与的FOSS项目完全相同。 它包含’Core’类库中的所有内容(甚至是Controllers和Global.asax.cs)。

有很多有效的解决方案,我选择的是创建一个Settings类,它实际上是一组静态属性,你可以在其中:

 public static string ConnectionString { get { return ConfigurationManager.ConnectionStrings["MYAPP"].ConnectionString; } } 

注意:确保您的类库添加了System.Configuration作为参考。

在你的应用程序内部(从HttpApplication派生的类)你传递设置,虽然没有什么可以阻止你将NH设置与设置类紧密耦合:

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); SetupNHibernate(); } public virtual void SetupNHibernate() { NHibernateRepository.Current.Configure(RoadkillSettings.DatabaseType, Settings.ConnectionString, false, Settings.CachedEnabled); } 

如果这对你有用, 那么来源就在这里。

由于您正在将类库用于MVC Web应用程序,因此类库也可以访问它。 无需其他设置。 即使构建类库时给出了一个单独的dll,它也会在当前项目中引用。 因此连接字符串也可用于类库。

我会使用像Autofac这样的东西给你一些IoC实现,它可以为你的连接字符串存储一个设置界面。 这将允许您在应用程序启动时从web.config设置值,或者在测试中将其设置为不同的值,而不必将类库连接到web.config。