我有一个三个组件: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 方法中放置断点时,它仍然在我第一次访问它时抛出异常。有人知道这里发生了什么吗?
非常感谢。