【发布时间】:2021-01-13 11:37:39
【问题描述】:
我正在维护公司非常旧的网站 (WebForms),它使用 Autofac 作为依赖注入。
我遇到的一个问题是,每次调用 Page_Load 时,都会再次解决任何依赖关系,并将它们设置为新的。我怎样才能阻止这种情况?
目前手头没有代码,但这个例子应该能更好地解释
示例案例
public class DatabaseManager
{
public string CustomerDbConnection {get;set;}
}
public partial class SiteSetup: Page
{
public DatabaseManager dbManager {get;set;}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// blah blah
}
}
protected void DdlDatabase_SelectedIndexChanged(object sender, EventArgs e)
{
dbManager.CustomerDbConnection = "Some db connection";
}
protected void ImageSaveSite_Click(object sender, EventArgs e)
{
// Do something with dbManager.CustomerDbConnection
}
}
所以在上面,DatabaseManager 被注入到 SiteSetup 页面中。当用户在下拉列表框“DdlDatabase”中选择一个项目时,会设置“dbManager.CustomerDbConnection”。
如果用户随后单击按钮“ImageSaveSite”,则在尝试访问“dbManager.CustomerDbConnection”时出现异常,因为它为空。
在“Page_OnLoad”方法中放置一个断点,我可以看到每次调用它时我都可以看到“dbManager.CustomerDbConnection”为空。我只能假设正在解析“DatabaseManager”的新实例。
有没有办法防止这种情况发生?我正在考虑将 DatabaseManager 注册为单例,但是网站的每个用户不会访问同一个实例吗?
【问题讨论】:
标签: c# asp.net webforms autofac