Nouveau à Castle/Windsor, s'il vous plaît ours avec moi.château PerRequestLifestyle pas reconnaître
J'utilise actuellement le cadre System.Web.Mvc.Extensibility et dans son code de démarrage, il inscrit HttpContextBase comme les suivantes:
container.Register(Component.For<HttpContextBase>().LifeStyle.Transient.UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));
Ce que je voulais faire est de changer le comportement et changer le mode de vie HttpContextBase être PerWebRequest.
donc je dois changer le code à ce qui suit:
container.Register(Component.For<HttpContextBase>().LifeStyle.PerWebRequest.UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));
Cependant, quand je le fais, je suis l'erreur suivante:
System.Configuration.ConfigurationErrorsException: Looks like you forgot to
register the http module Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule
Add '<add name="PerRequestLifestyle"
type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.MicroKernel"
/>' to the <httpModules> section on your web.config
que je l'ai fait sous <system.web>
et <system.webServer>
, mais , Je reçois toujours la même erreur. Des indices?
Merci d'avance.
Mise à jour
ajouté bloc de code par demande
Dans le cadre de system.web.mvc.extensibility, il y a une classe appelée extendedMvcApplication qui héritera de HttpApplication, et dans la méthode Application_Start, il appelle BootStrapper.Execute(). Cette mise en œuvre de cette méthode est la suivante:
public void Execute()
{
bool shouldSkip = false;
foreach (IBootstrapperTask task in ServiceLocator.GetAllInstances<IBootstrapperTask>().OrderBy(task => task.Order))
{
if (shouldSkip)
{
shouldSkip = false;
continue;
}
TaskContinuation continuation = task.Execute(ServiceLocator);
if (continuation == TaskContinuation.Break)
{
break;
}
shouldSkip = continuation == TaskContinuation.Skip;
}
}
Comme vous pouvez le voir, il boucle une liste de IBootStrapperTask et tente de les exécuter. Il se trouve que j'ai une tâche qui enregistrent les routes dans mon application mvc:
public class RegisterRoutes : RegisterRoutesBase
{
private HttpContextBase contextBase;
protected override TaskContinuation ExecuteCore(IServiceLocator serviceLocator)
{
contextBase = serviceLocator.GetInstance<HttpContextBase>();
return base.ExecuteCore(serviceLocator);
}
protected override void Register(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
routes.IgnoreRoute("{*robotstxt}", new { robotstxt = @"(.*/)?robots.txt(/.*)?" });
XmlRouting.SetAppRoutes(routes, contextBase.Server.MapPath("~/Configuration/Routes.xml"));
}
}
vous pouvez voir que je dois getInstance (résolution) un objet HttpContextBase tel que je peux obtenir le chemin du serveur d'un fichier xml .
quand est-ce que vous résolvez cet objet? à quel point? –
sur Application_Start(), est-ce trop tôt? – Herman
@Herman: ce n'est pas supporté pour le moment. Qu'essayez-vous de résoudre dans Application_Start()? –