Castle Windsor:使用LifeStyleScoped解析Component时抛出异常

时间:2013-02-06 10:16:43

标签: castle-windsor castle

我有三个组成部分:A,B和C.

他们以下列方式注册:

public class Installer : IWindsorInstaller
{
  public void Install(IWindsorContainer container, IConfigurationStore store)
  {
    container.Register(Component.For<IA>().ImplementedBy<A>());
    container.Register(Component.For<IB>().UsingFactoryMethod(Resolve).LifestyleScoped());
    container.Register(Component.For<IC>().ImplementedBy<C>().LifestyleScoped());
  }

  private static IUnitOfWork Resolve(IKernel kernel)
  {
    IA a = kernel.Resolve<IA>();
    B b = new B(a);
    kernel.ReleaseComponent(a);
    return b;
  }
}

当我解决C时,我按以下方式进行:

public void Test()
{
  using (ContainerAccessor.Instance.IocContainer.BeginScope())
  {
    using (IB b = containerAccessor.Instance.IocContainer.Resolve<IB>())
    {
      IC c = ContainerAccessor.Instance.IocContainer.Resolve<IC>();
      ...
      b.Commit();

      return result;
    }
}

第一次我访问它时,抛出异常:“InvalidOperationException:Scope不可用。你忘了调用container.BeginScope()吗?”。

我通过使用using (kernel.BeginScope) { ... }包装Resolve方法的内容来部分解决它。 我说它部分解决了,因为当我在resolve方法中放置一个断点时,它仍然会在我第一次访问它时抛出异常。 有人知道这里发生了什么吗?

非常感谢。

0 个答案:

没有答案