autofac的ASP.NET集成是否支持PreInit或Init事件?

时间:2010-03-10 23:45:39

标签: asp.net autofac

我在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更早地注入子控件的属性?或者这是否可以在未来的构建中解决?谢谢!

2 个答案:

答案 0 :(得分:2)

最后不接受补丁。

我认为通过基类解析依赖是一个更稳定的解决方案:

http://blog.js-development.com/2011/11/autofac-aspnet-webforms-usercontrol.html

在我的网站中,我决定只通过基类使用依赖注入页面和用户控件,所以我也没有尝试在不需要它的页面和控件上进行注入的开销。

答案 1 :(得分:1)

我为此问题想出了一个针对Autofac的小补丁。有关详细信息,请参阅Google代码项目中的See the issue tracker