这是场景。我有一个 WCF 服务,当调用此服务时,它会将控制权传递给另一个类的实例(通过 Ninject 创建)。在那个类中,我需要做一些工作,特别是实体框架和存储库。长话短说,我声明了以下绑定。
Bind<IGenericProductRepository>()
.To<GenericProductRepository>()
.WithConstructorArgument( "context", new StagingDataContext());
当我想使用这个存储库时,我有以下内容。
using (var genericProductRepository = IoC.Resolve<IGenericProductRepository>())
问题是,如果它是一个全新的请求,我只会得到一个新的 genericProductRepository 实例,如果在同一个请求中多次调用该方法,我会收到一个错误,指出上下文(EF 上下文)已经被释放,这是因为似乎我正在获取已在 using 语句中处理的相同实例。用另一种方式解释它,使用 Microsoft WCF 测试客户端,如果我第一次调用它,代码运行良好,如果我再次按下调用按钮(不重新启动测试客户端,即相同的请求)然后它抛出这个错误关于它已经被处置了。
我试图玩弄 Ninject 附带的各种“范围”,但显然我错过了一些东西。
所以我的基本问题是,当它到达那条线时,我如何获得一个新的存储库,而不是使用同一个?非常感谢您的帮助,我真的在努力推动我的公司采用 Ninject 并放弃 Spring。