2011-09-04 13 views
10

現在のWindows PhoneプロジェクトでSterlingDBを使用しています。MVVM Light v4の新しいSimpleIoCコンテナを使用して、アプリケーションのさまざまな場所からSterlingデータベースを解決できるようにしたいと考えています。MVVM Light SimpleIoCはシングルトンをサポートしていますか?

しかし、SimpleIoCがシングルトンの登録をサポートしているかどうかはわかりません。 SterlingDBエンジンは、アプリケーションが最初に起動したときに作成する必要があります。また、コンテナが参照を挿入するたびに新しいインスタンスを回転させたくありません。

私はこの問題について考えなければならない別の方法がある場合は、私も同様の選択肢を楽しむことができます。

答えて

27

SimpleIocは、渡されたキーに基づいてインスタンスを返します。キーなしでGetInstance()を呼び出すと、常にオブジェクトのデフォルトインスタンスが取得されます。このインスタンスは、初めてGetInstance(遅延生成)を呼び出すときにのみ作成されます。キーでGetInstanceを呼び出すと、この名前付きインスタンスが既にレジストリに存在するかどうか調べます。それがまだない場合、私はそれを作成し、私はそれを返します。既にそのキーを持つインスタンスがある場合は、それを返します。

アルファ版(BL16 MIX版)では、レジスタがキーを使用したときにインスタンスを作成するのが早すぎるバグがあります。このバグは今週発表するV4 beta1で修正されています。

常に、同じキーを使用する場合(またはキーをまったく使用しない場合は単にデフォルトのインスタンス)、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> 

共通の参照を、私は通常のSilverlightプロジェクトでスターリングを使用していますし、私がやっているすべては、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を呼び出す...希望これは役立ちます。

​​
関連する問題