4

我有一个三个组件: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;
  }
}

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

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()?”。

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

非常感谢。

4

0 回答 0