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