2010-03-10 3 views
1

Je vois de fouiller dans la source 1.4.4 que l'intégration ASP.NET d'Autofac (via Autofac.Integration.Web) effectue l'injection de propriétés sur le Page dans le cadre de la gestion des événements HttpContext.PreRequestHandlerExecute, mais que les contrôles enfant de la page ne ' t obtenir leurs propriétés injecté jusqu'à Page.PreLoad. Cela signifie cependant que les propriétés injectées des contrôles enfants ne sont pas disponibles dans le gestionnaire d'événements OnInit.Est-ce que l'intégration ASP.NET d'autofac prend en charge les événements PreInit ou Init?

Par exemple, cela fonctionne très bien:

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 

Mais changer le HelloWorld Page à un UserControl (.acsx) et de mettre l'UserControl dans une autre page ne fonctionne pas parce que _msgProvider n'est pas injecté assez tôt.

Existe-t-il un moyen de faire en sorte qu'Autofac injecte les propriétés des contrôles enfants plus tôt? Ou est-ce quelque chose qui peut être abordé dans une future construction? Merci!

+0

Cela devrait probablement aller dans le suivi des problèmes Autofac: http://code.google.com/p/autofac/issues/list –

+0

Ajouté que le problème # 203 (http://code.google.com/p/autofac/issues/detail? id = 203) –

+0

Des solutions de contournement ou des correctifs pour ce problème maintenant? –

Répondre

1

J'ai trouvé un petit correctif à Autofac pour ce problème. See the issue tracker dans le projet Google Code pour plus de détails.

+0

Comme indiqué dans le programme de suivi des problèmes Autofac, le correctif a dû être annulé. Le mainteneur Autofac a résolu le bogue comme "WontFix". –

2

À la fin, le correctif n'a pas été accepté.

Je pense que la résolution de la dépendance par une classe de base est une solution plus stable:

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

Dans mon site, j'ai décidé d'utiliser uniquement l'injection de dépendance par une classe de base pour les pages et usercontrols donc je ne aussi » t avoir le temps d'essayer de faire l'injection sur les pages et les contrôles qui n'en ont pas besoin.

Questions connexes