我在HomeController中有一个方法,我试图通过URL访问它,如下所示:
http://localhost/web/home/GetSmth它第一次工作,但是在刷新页面之后,我得到了以下错误:
The operation cannot be completed because the DbContext has been disposed.正如标题所述,我试图在每个请求中使用Castle和DbContext。
public class Installer1 : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly()
.BasedOn<IController>()
.LifestyleTransient()
);
var connString = ConfigurationManager.ConnectionStrings["MainDbContext"].ConnectionString;
container.Register(Component.For<MainDbContext>().DependsOn(Property.ForKey("conn").Eq(connString)).LifeStyle.PerWebRequest);
container.Register(Component.For<ISomeService>().ImplementedBy<SomeService>());
}
}HomeController看起来是这样的:
public class HomeController : Controller
{
private ISomeService _someService;
public HomeController(ISomeService someService)
{
_someService = someService;
}
public ActionResult Index()
{
return View();
}
public JsonResult GetSmth()
{
var data = _someService.GetData().ToList();
return Json(data, JsonRequestBehavior.AllowGet);
}
}发布于 2014-05-22 07:24:57
您正在使用默认的生命周期(即单例生命周期)注册ISomeService。一旦它被创建,它将继续使用相同的DbContext。最简单的解决方案是将其生命周期更改为每个请求或瞬态。
container.Register(Component.For<ISomeService>()
.ImplementedBy<SomeService>()
.LifeStyle.PerWebRequest);https://stackoverflow.com/questions/23800219
复制相似问题