以下是情景描述。我有一个WCF服务,当调用此服务时,它会将控制权传递给另一个类的实例(通过Ninject创建)。在那个类中,我需要做一些工作,具体来说是使用Entity Framework和repositories。为了简化故事,我声明了以下绑定。
Bind<IGenericProductRepository>()
.To<GenericProductRepository>()
.WithConstructorArgument( "context", new StagingDataContext());
当我想使用这个代码库时,我需要执行以下步骤。
using (var genericProductRepository = IoC.Resolve<IGenericProductRepository>())
问题在于,如果它是一个全新的请求,我只会得到genericProductRepository的一个新实例,如果在同一个请求中多次调用该方法,则会出现错误,指出上下文(EF上下文)已经被处理,这是因为似乎返回了已经在using语句中处理过的相同实例。换句话说,使用Microsoft WCF测试客户端时,如果我第一次调用它,代码运行正常,如果我再次点击调用按钮(而不重新启动测试客户端,即相同的请求),则会抛出关于它已被处理的错误。
我已经尝试过玩弄与Ninject一起提供的各种“作用域”,但显然我漏掉了某些东西。
所以我的基本问题是,如何在每次到达那一行时获得一个新的repository,而不是使用同一个?非常感谢您的帮助,我真的很想推动我们公司采用Ninject并放弃Spring。