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
答
我使用英镑在我的正常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
谢谢,洛朗。这很有道理。我越来越接近能够通过查看代码自己回答这些问题,但我还没有完成。一如既往地欣赏援助。 –