2012-11-15 3 views
1

나는 make a dynamic sitemap using MvcSiteMapProvider입니다.DynamicNodeProviderBase의 MvcSiteMapProvider 및 StructureMap?

문제는 _jobService이 null 인 것입니다. 무엇이 잘못 되었나요? 다른 위치에 IJobService을 사용하고있어 올바르게 구성되어 있습니다. 예 : 나는 sitemap.xml을 만드는 데 사용하고는 동적 노드에 올 때 그래서 다음 오류를 몇 노드를 생성로

private IJobService _jobService 
{ 
     get 
     { 
      return DependencyResolver.Current.GetService<IJobService>(); 
     } 
} 

public override IEnumerable<DynamicNode> GetDynamicNodeCollection() 
{ 
     List<JobViewModel> activeJobs = _jobService.GetJobs().ToList(); 

     // Create a node for each job 
     foreach (var job in activeJobs) 
     { 
      var node = new DynamicNode(); 
      node.Title = job.Title; 
      node.RouteValues.Add("id", job.Id); 

      yield return node; 
     } 
} 

이 코드는 한 번만 실행 :

x.For<IJobService>().Use<JobService>(); 

여기 내 코드입니다. 오류 발생 후 페이지를 새로 고침하면 생성 된 sitemap.xml이 표시됩니다 (동적 노드는 제외) /job/1, /job/2).

+0

'GetDynamicNodeCollection'은 메뉴를 새로 고칠 때마다 또는 단 한번만 (즉, DI가 초기화되기 전에) 실행됩니까? – Mightymuke

+0

찾아 주셔서 감사합니다. 끝에 게시글을 업데이트했습니다. 그것은 한 번만 실행됩니다. – KevinUK

+0

DI 컨테이너가 초기화되기 전에 실행되는 이유는 무엇입니까? 그것은 분명히 이유가 'null'이 시점에서 설명하고, 여전히 다른 곳에서 유효합니다. – Mightymuke

답변

0

정확히 어떤 것이 문제인지는 모르겠지만 초기화 순서와 관련이 있다고 생각합니다. 즉, DI 컨테이너 구성 코드가 실행되기 전에 사이트 맵이 생성되었습니다.

이것은 MvcSiteMapProvider v4에서 수정되었습니다. 이제 DI를 사용하여 전체 공급자를 구성하고 Microsoft의 SiteMapProvider 모델에 대한 종속성을 제거했습니다. 이 공급자 모델은 MvcSiteMapProvider (캐싱, DI, 성능, 스레딩, 초기화 등)로 거의 모든 두통의 근원이었습니다.