首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PerWebRequest生活方式的工厂方法

PerWebRequest生活方式的工厂方法
EN

Stack Overflow用户
提问于 2015-09-09 13:25:53
回答 2查看 278关注 0票数 0

我正在使用温莎城堡,并试图使用LifestylePerWebRequest。然而,我需要使用工厂方法来创建我的对象,所以我有以下的注册。

代码语言:javascript
复制
Component.For<IMyComponent>()
         .UsingFactoryMethod(CreateMyComponent)
         .LifestylePerWebRequest()

当我在CreateMyComponent中放置一个断点时,我看到它在一个请求中命中了好几次。这似乎不是PerWebRequest生活方式的正确行为。这两者不兼容吗?我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-09 13:49:32

尝试将此添加到您的Global.asax.cs文件中,以验证每个web请求是否多次调用CreateMyComponent (不应该):

代码语言:javascript
复制
protected void Application_BeginRequest(object sender, EventArgs args)
{
    System.Diagnostics.Debug.WriteLine(this.Request.RequestType + " " + this.Request.RawUrl);
}

在CreateMyComponent-方法和Application_BeginRequest-方法中都放置一个断点。调试器应该首先停止在Application_BeginRequest-方法,然后在CreateComponent-方法。它不应该再次进入CreateComponent-方法,除非它首先进入Application_BeginRequest-方法。

也许您有一些ajax或其他资源来生成“每个页面加载”的多个请求,从而使温莎似乎在每个web请求中多次调用工厂方法。如果是这样的话,这就说明了。

如果它确实在每个HTTP请求中多次调用您的方法,则可能是缺少配置,这是另一个答案所暗示的。

票数 1
EN

Stack Overflow用户

发布于 2015-09-09 13:46:35

卡塞尔自己的文档使用了工厂方法的web请求生活方式,因此它们应该是兼容的。

该部分的其余部分将继续讨论使用PerWebRequest时的其他注意事项,因此可能值得一读。特别是:

我们必须打开我们的web.config文件,找到它的system.web部分,然后添加以下内容:

代码语言:javascript
复制
<httpModules>
  <add name="PerRequestLifestyle" 
       type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
</httpModules>

对不起,如果这没有多大帮助!尽管如此,如果您获得了正确的配置,则应该支持您想要做的事情。

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

https://stackoverflow.com/questions/32480861

复制
相关文章

相似问题

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