首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PerWebRequest组件的瞬态组件,PerWebRequest组件何时超出作用域?

使用PerWebRequest组件的瞬态组件,PerWebRequest组件何时超出作用域?
EN

Stack Overflow用户
提问于 2016-10-27 09:42:19
回答 1查看 38关注 0票数 1

我想弄清楚一个有点复杂的场景。基本上,如果我有类X在城堡中注册为LifestyleTransient()

代码语言:javascript
复制
Component.For<IX>()
.ImplementedBy<X>()
.LifestyleTransient()

X看起来类似于:

代码语言:javascript
复制
public X : IX
{
    private IY _y;
    public X(IY y)
    {
        _y = y;
    }
    ....
}

Y是这样注册的:

代码语言:javascript
复制
Component.For<IY>()
.ImplementedBy<Y>()
.LifestylePerWebRequest()

看起来:

代码语言:javascript
复制
public Y : IY, IDisposable
{
    private Object obj;
    public Y()
    {
       obj = new Object();
    }  

   public void Dispose()
   {
      obj.Dispose();
   }
}

如果我创建一个XRelease实例,它:

代码语言:javascript
复制
WindsorContainer Container;
IX x = Container.Resolve<IX>();
Container.Release(x);

何时在Y?上调用Dispose它是在web请求的末尾还是在x的实例被释放的时候?Dispose接到电话了吗?!

注:--这是一个有点转换的例子,我的实际示例要复杂得多,并且喜欢使用MVC ControllerFactory和其他各种技术,但这个问题可以用它最简单的形式归结到上面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 10:42:14

经过一些试验,如下所示是正确的:

  • Dispose()将被呼叫
  • 在web请求的末尾调用Dispose
  • 如果创建并释放了多个瞬态X,则Dispose仅在web请求结束时(在Y上)调用一次。当瞬态容器对象被释放时不会。

警告

通过调试Dispose方法等,我得出了这个结论。我假设我正在调试它,这并没有对它的性能产生任何影响。我还没有找到任何结论性的文件,这应该是如何运作,并会欢迎任何人发现这一点?

我的实现与问题中的实现略有不同,我猜温莎需要知道接口是否为IDispoable,因此IY看起来如下:

代码语言:javascript
复制
interface IY : IDisposable

我还没有测试这是否相关(如果它没有损坏,就不要修复它)。

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

https://stackoverflow.com/questions/40281262

复制
相关文章

相似问题

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