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

时间:2011-10-04 18:59:24

标签: c# model-view-controller class

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

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

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

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

非常感谢您的任何想法。

6 个答案:

答案 0 :(得分:18)

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

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

请参阅this blog post以获取有关直接访问配置的参数(这是非常常见的,但不是最佳实践)。

答案 1 :(得分:11)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

我与我参与的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);
}

如果这对您有用,the source is here.

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

相关问题