MVVM Light SimpleIoC是否支持单例?

问题描述:

我在当前的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

+0

希望你能回答这个问题...... ;-)。我猜想,它是这样工作的,但是没有完全回答这个WE。 – AxelEckenberger

+0

谢谢,洛朗。这很有道理。我越来越接近能够通过查看代码自己回答这些问题,但我还没有完成。一如既往地欣赏援助。 –

我使用英镑在我的正常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在以往任何时候我需要引用的服务是这样的...希望这有助于。

​​