gpt4 book ai didi

c# - CaSTLe Windsor 处置命令

转载 作者:行者123 更新时间:2023-11-30 12:58:57 26 4
gpt4 key购买 nike

我在使用温莎城堡处理已解析组件的顺序时遇到问题。该问题可以在以下代码中演示

class Program
{
static void Main(string[] args)
{
using (WindsorContainer container = new WindsorContainer())
{
container.Register(Component.For<C1>().LifestyleSingleton());
container.Register(Component.For<C2>().LifestyleTransient());
C1 c1 = container.Resolve<C1>();
container.Release(c1);
Console.WriteLine("Release done");
}
Console.WriteLine("Container dispose done");
}
}

public class C1 : IDisposable
{
private C2 m_c2;

public C1(C2 c2)
{
m_c2 = c2;
}

public void Dispose()
{
Console.WriteLine("Dispose C1");
}
}

public class C2 : IDisposable
{
public void Dispose()
{
Console.WriteLine("Dispose C2");
}
}

打印如下:

Release doneDispose C2Dispose C1Dispose C2Container dispose done

我希望得到以下输出:

Release doneDispose C1Dispose C2Container dispose done

在 C1 之前处理 C2 会导致 C1 出现严重问题。 C1 可能仍然存在并正在处理某些事情。请注意,当两个组件都注册到 LifestyleSingleton 或 LifestyleTransient 时,问题就会消失,但仍然存在将 C2 注册为 LifestyleTransient 可能有用的情况。

有没有办法注册或者解析组件来解决这个问题?

最佳答案

我通过使用作用域并将 C1 注册为 Scoped 解决了这个问题。在这种情况下,处理顺序是正确的。但我不确定这是否是推荐的方式。

关于c# - CaSTLe Windsor 处置命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27904807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com