타이머 작업에서 새 Ninject 컨텍스트를 호출하는 방법은 무엇입니까? ninject 범위를 unitofwork로 구성하는 데 어려움이 있습니다. 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).
그래서 ... 현재 상태/db 값을 반영하여 새 Ninject "컨텍스트"를 호출하는 방법은 무엇입니까?
빠른 응답을 위해 Thanks Remo. 하지만이 경우 재발하는 독립적 인 작업이 아닙니다 ... 클라이언트가 브라우저 윈도우를 닫을 때 (웹 애플리케이션에서 SignalR을 사용하여) 웹 앱에서 호출되는 것은 실제로 지연된 단일 작업입니다. 여전히 Windows 서비스가 가장 좋을 것이라고 생각하십니까? 이 경우 웹 앱에서 서비스를 어떻게 호출합니까? –
참조 http://stackoverflow.com/a/11772577/11635 –