0
我有一個控制器操作,爲長時間運行的進程創建一個新的線程。Asp.net MVC調用新的請求
控制器通過Ninject
得到它的相關性。
問題是,當線程試圖訪問依賴項時,已經處理完了。
有沒有一種方法可以從Thread
創建一個全新的請求,它會執行長時間運行的任務,所以依賴關係會被重新創建?
public class HomeController : Controller
{
private readonly IUnitOfWork _unitOfWork;
public HomeController(
IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
[HttpPost]
public ActionResult DoLongRunningTask(Guid product_Id)
{
// long running action
ThreadPool.QueueUserWorkItem(
(data) =>
{
try
{
// _unitOfWork is already disposed when i get here
Product product = _unitOfWork.Products.First(p => p.Id == product_Id);
// do long running task
}
catch (Exception ex)
{
}
});
return new JsonNetResult { Data = new { } };
}
}
進樣'IResolutionRoot'到控制器,再由控制器通過'IResolutionRoot'的任務,然後在新線程內,使用'IResolutionRoot'來檢索所有的依賴關係。但是,如果您的依賴項綁定在RequestScope中,則會出現問題:新線程中沒有請求範圍。你可能會冒充它(它=請求),或者你可能需要調整綁定。至少它會立即顯示是否存在範圍問題。 – BatteryBackupUnit