2011-09-04 7 views
10

현재 Windows Phone 프로젝트에서 SterlingDB를 사용하고 있습니다. MVbase Light v4의 새 SimpleIoC 컨테이너를 사용하여 응용 프로그램의 여러 위치에서 Sterling 데이터베이스를 해결할 수 있기를 원합니다.MVVM Light SimpleIoC가 싱글 톤을 지원합니까?

그러나 SimpleIoC가 싱글 톤 등록을 지원하는지 확실하지 않습니다. SterlingDB 엔진은 앱이 처음 시작될 때만 만들어야하며, 컨테이너가 컨테이너에 대한 참조를 삽입 할 때마다 새 인스턴스를 회전시키고 싶지는 않습니다.

내가이 문제에 대해 생각해야 할 다른 방법이 있다면, 대안을 즐기는 것도 기쁠 것입니다.

답변

27

SimpleIoc은 전달한 키를 기반으로 인스턴스를 반환합니다. 키없이 GetInstance()를 호출하면 항상 개체의 기본 인스턴스를 가져옵니다. 이 인스턴스는 처음으로 GetInstance (게으른 생성)를 호출 할 때만 만들어집니다. 키로 GetInstance를 호출하면이 명명 된 인스턴스가 이미 레지스트리에있는 경우 조회합니다. 아직 작성하지 않았다면 생성 한 다음 반환합니다. 이미 그 키가있는 인스턴스가 있으면 그냥 반환합니다.

알파 버전 (BL16 MIX 에디션)에는 Register가 키를 사용했을 때 인스턴스를 너무 일찍 만들게하는 버그가 있습니다. 이 버그는 이번 주에 발표 할 V4 베타 1에서 수정되었습니다.

항상 같은 키 (또는 키를 전혀 사용하지 않는 경우 단순히 기본 인스턴스)를 사용하면 SimpleIoc에서 동일한 인스턴스가 생성됩니다.

의미가 있습니까? Laurent

+0

답변을 드리려고했는데 ...--). 나는 그것이 그런 식으로 일했으나 '이 WE에 대답하는 것'을 얻지 못했을 것이라고 추측했다. – AxelEckenberger

+0

고마워, 로랑. 그것은 많은 의미가 있습니다. 나는 코드를 보면서 이러한 질문에 대답 할 수있는 것에 더 가까워지고 있지만, 나는 아직 그곳에 있지 않다. 언제나처럼 도움을 주셔서 감사합니다. –

1

.. 내가 예에서 복사 벌금 SterlingService.cs이 .. 같이 시작

<Application.ApplicationLifetimeObjects> 
     <common:SterlingService /> 
     <appServices:WebContext> 
      <appServices:WebContext.Authentication> 
       <!--<appsvc:FormsAuthentication/>--> 
       <appsvc:WindowsAuthentication /> 
      </appServices:WebContext.Authentication> 
     </appServices:WebContext> 
    </Application.ApplicationLifetimeObjects> 

일반적인 참조를 내 정상적인 실버 라이트 프로젝트에 순은을 사용하고 내가 뭐하는 거지 모두가 App.xaml이 추가됩니다 이

namespace Common 
{ 
     public sealed class SterlingService : IApplicationService, IApplicationLifetimeAware, IDisposable 
     { 
      public const long KILOBYTE = 1024; 
      public const long MEGABYTE = 1024 * KILOBYTE; 
      public const long QUOTA = 100 * MEGABYTE; 

      private SterlingEngine _engine; 
      private static readonly ISterlingDriver _driver = new IsolatedStorageDriver(); // could use this: new MemoryDriver(); 

      public static SterlingService Current { get; private set; } 

} 

나중에 난 그냥 .. 한혜진 등이 서비스의 래퍼를 생성하고 난 그냥 지금 난과 같이 서비스를 참조 할 필요가 SterlingService 전화 ... 희망이 도움이됩니다.

[ExportService(ServiceType.Runtime, typeof(IOffLineDataService))] 
    public sealed class OfflineDataService : IOffLineDataService 
    { 
     User user = WebContext.Current.User; 

     public OfflineDataService() 
     { 

     } 


     public void PurgeAll(Action<Exception> callback) 
     { 
      try 
      { 
       SterlingService.Current.Database.Purge(); 
       callback(null); 
      } 
      catch (Exception ex) 
      { 
       Error.LogError(ex, user); 
       callback(new Exception(ErrorMessages.OfflinePurgeAll)); 
      } 
     } 
} 
관련 문제