城堡 - 使用工厂方法和瞬态生活方式

时间:2009-12-10 18:00:02

标签: c# castle-windsor ioc-container

我的应用程序启动方法中包含以下代码 设置容器和工厂支持的代码。工厂 方法似乎只调用一次而不是每次调用会话 需要。

_container.Kernel.Register(
    Component.For<ISession>().LifeStyle.Transient
    .UsingFactoryMethod(() =>
    {
        //Any line of code will only be hit once the first time ISession is requested.
    }));

我最初使用的是来自主干的build 1509,但是更新后用它来构建1548 同样的结果。如果您需要更多信息,请告知我们 我

注意:这是交叉发布到城堡邮件列表等待批准。

注2:此代码适用于最新版本的windsor。但是,我们正在使用trunk构建,因为我们需要changeset 5927(由mausch于2009年8月13日创建)的功能。

请参阅:

  1. Register Multiple Components for Single Interface Using Castle Windsor
  2. http://fisheye2.atlassian.com/changelog/castleproject/?cs=5927

1 个答案:

答案 0 :(得分:2)

为什么你没有为这个组件使用PerWebRequest生命周期,或者更好的是Windsor的NHibernate集成工具呢?

现在回到真正的问题。

您的代码无效,因为它有错误。您没有将引用存储在当前的HttpContext中。您将引用存储在HttpContext中,该引用对您传递给的委托的第一次调用是最新的。匿名委托(或包含它的匿名类)存储对第一个HttpContext实例的引用,因此只有在第一次请求到达时,if条件才会为false。