将用户控件从Web项目移动到他们自己的库/程序集中

时间:2009-08-13 19:59:22

标签: c# asp.net user-controls

我们有一个网站,我们想要推断用户控件并将它们放入自己的程序集中。这样我们就可以更轻松地在其他类似项目中重用这些控件。我认为我们可以通过创建一个新的类库项目,将.ascx和.ascx.cs文件移动到这个项目,添加相应的.net程序集引用,并修改项目对这些用户控件的引用来相当容易地做到这一点。他们来自图书馆。

我现在预见到的问题是这些控件严重依赖于某个数据库架构。从历史上看,我们始终在web.config中保留连接字符串,并且一直使用LINQ to SQL进行数据库管理,因此我无法想出一种在网络中共享数据库连接信息的“最佳实践”方法。使用程序集配置。我能想到的唯一方法是为我的每个用户控件添加一个ConnectionString属性,并在Page_Load上设置ConnectionString属性(它将依次使用该连接字符串创建数据上下文的实例)。但是,我希望改为完成下列任务之一:

  • 以某种方式让程序集直接从web.config中拉出连接字符串。由于程序集不是Web应用程序,我显然不能只调用ConfigurationManager.ConnectionStrings [“connection”]。这可能吗?
  • 不太可能,但想办法在应用程序启动时设置连接字符串一次,并让我的用户控件的每个实例以某种方式重用它。我认为有一种方法可以缓存这个值以供程序集重用,但我想不出办法来做到这一点。

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

控件将使用调用应用程序配置中包含的任何连接字符串。不需要单独的配置。

  

我显然不能只调用ConfigurationManager.ConnectionStrings [“connection”]。这可能吗?

是!

答案 1 :(得分:0)

调用System.Configuration.ConfigurationManager.ConnectionStrings将返回应用程序的web.config中的结果,即使调用代码放在它自己的程序集中也是如此。记住:它不是assembly.config,而是web.config。

如果您的用户控件需要一个名为“MyDatabase”的连接字符串,那么他们使用的每个Web应用程序都需要在其web.config中定义的MyDatabase连接字符串。