2012-08-10 4 views
0

누구든지 WebBackgrounder 라이브러리에 의존성 주입을 사용한 경험이 있습니까?WebBackgrounder + Ninject

특히 작업 내에서 저장소에 액세스해야하며 수명은 작업 수명에 따라 다릅니다. 가급적 나는 속성 주입을 피하고 싶습니다. 모든 입력에 대한

public static class WebBackgrounderSetup 
{ 
    static readonly JobManager _jobManager = CreateJobWorkersManager(); 

    public static void Start() 
    { 
     _jobManager.Start(); 
    } 

    public static void Shutdown() 
    { 
     _jobManager.Dispose(); 
    } 

    private static JobManager CreateJobWorkersManager() 
    { 
     var jobs = new IJob[] 
    { 
     new TmdbJob(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)) 
    }; 

     var manager = new JobManager(jobs, new SingleServerJobCoordinator()); 
     manager.Fail(ex => Elmah.ErrorLog.GetDefault(null).Log(new Error(ex))); 
     return manager; 
    } 
} 

감사 :

이것은 App_Start 내 WebBackgrounderSetup입니다!

답변

2

WebBackgrounder에 대한 경험이 없지만 모든 멀티 스레드 응용 프로그램과 동일한 조언을 제공합니다. 기본 규칙은 다음과 같습니다.

  • 서비스가 스레드에 종속적이거나 종속적 일 수 있으므로 다른 스레드에 서비스 (종속성)를 전달하지 마십시오.
  • 대신, 해당 스레드의 시작 부분에 새 개체 그래프를 확인하십시오.
  • HttpContext (예 : 요청 별 라이프 스타일)에만 해당되며 배경 스레드에서 사용할 수 있어야하는 수명 또는 캐싱이있는 종속성의 경우 hibrid 라이프 스타일로 구성해야합니다 (요청 당 스레드 당).
  • ASP.NET은 요청을 시작한 것보다 다른 스레드에서 요청을 완료 할 수 있으므로 스레드별로 이러한 종속성을 등록하지 마십시오.

자세한 내용은 Work with dependency injection in multi-threaded applications에서 확인할 수 있습니다. 위키 페이지는 다른 DI 프레임 워크에서 가져온 것이지만 대부분은 Ninject에 적용됩니다.