首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >autofac的ASP.NET集成是否支持PreInit或Init事件?

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

Stack Overflow用户
提问于 2010-03-10 23:45:39
回答 2查看 470关注 0票数 1

我从1.4.4源代码中看到,Autofac的ASP.NET集成(通过Autofac.Integration.Web)在Page上注入属性作为HttpContext.PreRequestHandlerExecute事件处理的一部分,但是页面的子控件直到Page.PreLoad才会被注入属性。

但是,这意味着子控件的注入属性在OnInit事件处理程序中不可用。

例如,这可以很好地工作:

代码语言:javascript
复制
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更早地注入子控件的属性?或者这是可以在未来构建中解决的问题吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-04-06 14:56:34

最后,补丁没有被接受。

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2010-03-15 17:47:02

我为这个问题给Autofac做了一个小补丁。见问题跟踪器在Google项目中获得详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2421547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档