2014-10-29 3 views
0

GridControl을 가지고 있으며 ServiceLocator.Default 인스턴스를 사용하여 컨트롤 생성자에서 객체 (예 : IMessageService)를 검색하려고합니다. 런타임에는 문제가 없지만 컨트롤은 디자인 타임에 예외를 throw합니다. 컨트롤이 Visual Studio 디자이너에 나타나지 않습니다.Catl ServiceLocator를 컨트롤 생성자에 사용하십시오.

ServiceLocator.Default에 대한 null이 아닌 검사가 도움이되지 않습니다. 전체 디자이너 지원과 함께 컨트롤의 ctor에있는 서비스 로케이터를 어떻게 사용할 수 있습니까?

public MyGridControl() 
    { 
     if (ServiceLocator.Default != null) 
     { 
      this.mySettingService = ServiceLocator.Default.ResolveType<IRosySettingService>(); 
      if (this.mySettingService != null) 
      { 
       var mediator = ServiceLocator.Default.ResolveType<IMessageMediator>(); 
       mediator.Register<String>(this, SaveSettings, MessageKeys.SaveGridSettings); 
      } 
     } 
    } 

감사합니다!

스테판

답변

0

당신은 디자이너에서 코드가 실행되지 않도록해야한다. 다음과 같이 할 수 있습니다.

public MyGridControl() 
{ 
    if (CatelEnvironment.IsInDesignMode) 
    { 
     return; 
    } 

    // TODO: Use service locator and all runtime code 
}