1
我已經創建了一個包含MVC5/EF6的站點,並且使用Ninject作爲DI容器將它綁定在一起。Ninject/Entity Framework - 同時處理請求時出錯
除了在一個頁面上,我在同一時間進行2個Ajax調用,所有工作都很好。
控制器/存儲庫吐出各種錯誤,如:
「類型‘System.Data.Entity.Core.EntityException’的第一次機會異常出現在mscorlib.dll附加信息:基礎提供失敗開放「。
一次調用api將始終工作,第二次間歇性地工作。如果我直接在控制器中創建datacontext,它一切正常,所以錯誤必須與Ninject相關,但我無法弄清楚我需要對它進行排序。將範圍變爲瞬態/線程只會改變錯誤。
任何幫助非常感謝。
這是我(編輯)代碼:
從Global.asax中的Application_Start()調用
var context = new myDataContext();
// Lowest down wins
IKernel kernel = new StandardKernel();
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
GlobalConfiguration.Configuration.DependencyResolver
= new App_Start.NinjectResolver(kernel);
kernel.Bind<IRepository<Models.MyClass>>()
.To<MyRepository>()
//.InTransientScope()
//.InThreadScope()
.InRequestScope()
.WithConstructorArgument("context", context);
阿比控制器
public class MyApiController : ApiController
{
IRepository<MyRepository> _repository;
public EMAAFController(IRepository<MyRepository> repository)
{
_repository = repository;
}
public IEnumerable<Models.MyClass> Get(int id)
{
var itemToReturn = _repository.GetAll().Where(i => i.id == id).ToList();
return itemToReturn;
}
}
謝謝你的答案。看起來它會是正確的,但我仍然對datacontext的實例將在哪裏創建時感到困惑。請你能拼出來給我。我嘗試了大約20分鐘的谷歌搜索,無法解決這個問題。 – HockeyJ
忽略我。我已經完成了。除了你的觀點之外,我的構造函數正在接受一個DbContext,而不是一個接口或特定的上下文。這阻止了Ninject解決綁定問題。在存儲庫中使用MyDataContext中的構造函數修復了它。感謝您的幫助 – HockeyJ
如果有任何搜索者發現這篇文章,並閱讀了我以前的評論,我也發現這有助於 - http://stackoverflow.com/questions/14840515/no-matching-bindings-are-available-and-the-類型是 - 不自綁定功能於ninject – HockeyJ