我在當前的Windows Phone項目中使用SterlingDB,並且希望能夠使用MVVM Light v4中的新SimpleIoC容器從應用程序中的各個位置解析Sterling數據庫。MVVM Light SimpleIoC是否支持單例?
但是,我不確定SimpleIoC是否支持註冊單例。 SterlingDB引擎只能在應用程序第一次啓動時創建,並且我不想在每次容器注入引用時都啓動新實例。
如果還有其他方法我應該考慮這個問題,我很樂意接受替代方案。
我在當前的Windows Phone項目中使用SterlingDB,並且希望能夠使用MVVM Light v4中的新SimpleIoC容器從應用程序中的各個位置解析Sterling數據庫。MVVM Light SimpleIoC是否支持單例?
但是,我不確定SimpleIoC是否支持註冊單例。 SterlingDB引擎只能在應用程序第一次啓動時創建,並且我不想在每次容器注入引用時都啓動新實例。
如果還有其他方法我應該考慮這個問題,我很樂意接受替代方案。
SimpleIoc根據您傳遞給它的密鑰返回實例。如果您在不使用密鑰的情況下調用GetInstance(),則將始終獲取對象的默認實例。該實例僅在第一次調用GetInstance時創建(延遲創建)。如果您使用密鑰調用GetInstance,則查找註冊表中是否存在此已命名的實例。如果它還沒有,我創建它,然後我將它返回。如果已經有一個關鍵的實例,我只是返回它。
在alpha版本(BL16 MIX版本)中,有一個錯誤導致Register在使用密鑰時過早創建實例。這個錯誤修復了我將在本週發佈的V4 beta1。
因此,如你所見,如果你總是使用相同的密鑰(或者只是默認實例,如果你根本不使用密鑰的話),你將從SimpleIoc中獲得相同的實例。
是否有意義? Laurent
我使用英鎊在我的正常Silverlight項目和所有我做的是加入這App.xaml中..
<Application.ApplicationLifetimeObjects>
<common:SterlingService />
<appServices:WebContext>
<appServices:WebContext.Authentication>
<!--<appsvc:FormsAuthentication/>-->
<appsvc:WindowsAuthentication />
</appServices:WebContext.Authentication>
</appServices:WebContext>
</Application.ApplicationLifetimeObjects>
共同引用罰款我從例子中複製的SterlingService.cs ..像啓動這
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在以往任何時候我需要引用的服務是這樣的...希望這有助於。
希望你能回答這個問題...... ;-)。我猜想,它是這樣工作的,但是沒有完全回答這個WE。 – AxelEckenberger
謝謝,洛朗。這很有道理。我越來越接近能夠通過查看代碼自己回答這些問題,但我還沒有完成。一如既往地欣賞援助。 –