{
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
public static ISterlingDatabaseInstance Database
{
get
{
return _database;
}
}
//…
if (viewModel == null)
viewModel = new MainViewModel();
return viewModel;
}
}
public static ISterlingDatabaseInstance Database
{
get
{
return _database;
}
}
//…
注意,上面的全局静态属性Database的定义有助于在应用程序的各处引用这一数据库。此外,另一个全局静态属性ViewModel也起着类似的作用。
其次,我们定义了两个辅助方法。第一个方法_ActivateEngine旨在当程序首次启动时或者当程序从墓碑(tombstone)事件中唤醒时激活数据库ContactsDatabase。第二个方法_DeactivateEngine用于当应用程序退出或进入到墓碑(tombstone)事件中时停用Sterling引擎。
列表3:方法_ActivateEngine的关键代码部分
private void _ActivateEngine()
{
_engine = new SterlingEngine();
_logger = new SterlingDefaultLogger(SterlingLogLevel.Information);
_engine.Activate();
_database = _engine.SterlingDatabase.RegisterDatabase();
//register triggers
var maxIdx1 =
_database.Query().Any() ?
(from id in _database.Query()
select id.Key).Max() + 1 : 1;
_database.RegisterTrigger(new ContactsDatabase.GroupTrigger(maxIdx1));
var maxIdx2 =
_database.Query().Any() ?
(from id in _database.Query()
select id.Key).Max() + 1 : 1;
_database.RegisterTrigger(new ContactsDatabase.ContactTrigger(maxIdx2));
}
private void _DeactivateEngine()
{
_logger.Detach();
_engine.Dispose();
_database = null;
_engine = null;
}
{
_engine = new SterlingEngine();
_logger = new SterlingDefaultLogger(SterlingLogLevel.Information);
_engine.Activate();
_database = _engine.SterlingDatabase.RegisterDatabase();
//register triggers
var maxIdx1 =
_database.Query().Any() ?
(from id in _database.Query()
select id.Key).Max() + 1 : 1;
_database.RegisterTrigger(new ContactsDatabase.GroupTrigger(maxIdx1));
var maxIdx2 =
_database.Query().Any() ?
(from id in _database.Query()
select id.Key).Max() + 1 : 1;
_database.RegisterTrigger(new ContactsDatabase.ContactTrigger(maxIdx2));
}
private void _DeactivateEngine()
{
_logger.Detach();
_engine.Dispose();
_database = null;
_engine = null;
}