1

我从 1.4.4 源代码中看到 Autofac 的 ASP.NET 集成(通过 Autofac.Integration.Web)PageHttpContext.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 更改PageUserControl(.acsx) 并将 UserControl 放在另一个页面中不起作用,因为_msgProvider没有足够早地注入。

有没有办法让 Autofac 更早地注入子控件的属性?或者这是可以在未来构建中解决的问题?谢谢!

4

2 回答 2

2

最后补丁没有被接受。

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

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

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

于 2012-04-06T14:56:34.807 回答
1

我为这个问题想出了一个 Autofac 的小补丁。 有关详细信息,请参阅 Google Code 项目中的问题跟踪器。

于 2010-03-15T17:47:02.283 回答