我正在使用温莎城堡,并试图使用LifestylePerWebRequest。然而,我需要使用工厂方法来创建我的对象,所以我有以下的注册。
Component.For<IMyComponent>()
.UsingFactoryMethod(CreateMyComponent)
.LifestylePerWebRequest()当我在CreateMyComponent中放置一个断点时,我看到它在一个请求中命中了好几次。这似乎不是PerWebRequest生活方式的正确行为。这两者不兼容吗?我在这里做错什么了?
发布于 2015-09-09 13:49:32
尝试将此添加到您的Global.asax.cs文件中,以验证每个web请求是否多次调用CreateMyComponent (不应该):
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请求中多次调用您的方法,则可能是缺少配置,这是另一个答案所暗示的。
发布于 2015-09-09 13:46:35
卡塞尔自己的文档使用了工厂方法的web请求生活方式,因此它们应该是兼容的。
该部分的其余部分将继续讨论使用PerWebRequest时的其他注意事项,因此可能值得一读。特别是:
我们必须打开我们的web.config文件,找到它的system.web部分,然后添加以下内容:
<httpModules>
<add name="PerRequestLifestyle"
type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
</httpModules>对不起,如果这没有多大帮助!尽管如此,如果您获得了正确的配置,则应该支持您想要做的事情。
https://stackoverflow.com/questions/32480861
复制相似问题