我在1.4.4源代码中看到,Autofac的ASP.NET集成(通过Autofac.Integration.Web)作为Page
事件处理的一部分,在HttpContext.PreRequestHandlerExecute
上执行属性注入。 ,但页面的子控件在Page.PreLoad
之前不会注入的属性。
这意味着,虽然子控件的注入属性不可用于OnInit事件处理程序。
例如,这很好用:
HelloWorld.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="HelloWorld.aspx.cs" Inherits="HelloWorld" %>
<html>
<body>
<asp:Label runat="server" id="lblMsg" OnInit="HandleInit"/>
</body>
</html>
HelloWorld.aspx.cs:
...
protected void HandleInit()
{
lblMsg.Text = _msgProvider.GetMessage();
}
public IMsgProvider _msgProvider { private get; set; } // <-- Injected
但是将HelloWorld Page
更改为UserControl
(.acsx)并将UserControl放在另一个页面中不起作用,因为_msgProvider
未及早注入。
有没有办法让Autofac更早地注入子控件的属性?或者这是否可以在未来的构建中解决?谢谢!
答案 0 :(得分:2)
最后不接受补丁。
我认为通过基类解析依赖是一个更稳定的解决方案:
http://blog.js-development.com/2011/11/autofac-aspnet-webforms-usercontrol.html
在我的网站中,我决定只通过基类使用依赖注入页面和用户控件,所以我也没有尝试在不需要它的页面和控件上进行注入的开销。
答案 1 :(得分:1)
我为此问题想出了一个针对Autofac的小补丁。有关详细信息,请参阅Google代码项目中的See the issue tracker。