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