1
如何在Timer任務上調用新的Ninject上下文? 將ninject範圍配置爲單元工作很困難。如果我設置爲InRequestScope(),它不適用於非請求任務。所以我成立了類似下面這樣我可以爲任務得到InThreadScope:Ninject Scope和System.Threading.Timer
kernel.Bind<IUnitOfWork>().To<myEntities>().InScope(ctx => HttpContext.Current ?? StandardScopeCallbacks.Thread(ctx));
但這樣一來,當我成立了一個定時器
Timer timer = new Timer(_ => DelayedDisconnect(chatUser.User.AuthorizationId), null, TimeSpan.FromSeconds(10), TimeSpan.FromMilliseconds(-1));
中的DbContext不與新的數據庫值刷新。
public void DelayedDisconnect(string authorizationId)
{
var myChatUser = GetChatUserByClaimedIdentifier(authorizationId);
if (!myChatUser.ChatClients.Any()) // old state (doesn't reflect database changes from 10 seconds ago).
所以...如何調用一個新的Ninject「context」來反映當前狀態/ db值?
感謝雷莫某些對象的快速反應範圍。但在這種情況下,它不是一個經常性的獨立任務......它實際上是一個單一的延遲任務,當客戶端關閉瀏覽器窗口(使用SignalR)時,它將從Web應用程序中調用。你仍然認爲windows服務最適合這個嗎?在那種情況下,我將如何從Web應用程序調用服務? – 2012-07-12 12:26:49
另請參閱http://stackoverflow.com/a/11772577/11635 – 2012-08-02 13:03:12