Nop-IStartupTaskによるコード実行
IStartupTaskによる初期化タスク
norpからCoreのインタフェースIStartupTask public interface IStartupTask
{
void Execute();
int Order { get; }
}
public int Order // Order Interface implementation Class 。
{
get { return 0; }
}
各プロジェクトには、Nopなどのクラスがあります.Web下のAutoMapperStartUPtask/AdminStartupTask.とにかく名前は*StartupTaskのように見えます.cs,Nop.DataのEfstartUpTaskを例にとります.namespace Nop.Data
{
public class EfStartUpTask : IStartupTask
{
public void Execute()
{
if (!DataSettingsHelper.DatabaseIsInstalled())
return;
var settings = EngineContext.Current.Resolve<DataSettings>();
if (settings != null && settings.IsValid())
{
var provider = EngineContext.Current.Resolve<IEfDataProvider>();
if (provider == null)
throw new NopException("No EfDataProvider found");
provider.SetDatabaseInitializer();//
}
}
public int Order
{
//ensure that this task is run first
get { return -1000; }
}
}
}
//どうやってこれらのTaskを起動しますか? private void RunStartupTasks()
{
// namespace Nop.Core.Infrastructure.DependencyManagement. ContainerManager
//
var typeFinder = _containerManager.Resolve<ITypeFinder>();
// IstartupTask
var startUpTaskTypes = typeFinder.FindClassesOfType<IStartupTask>();
var startUpTasks = new List<IStartupTask>();
foreach (var startUpTaskType in startUpTaskTypes)
//Activator.createInstance Instance
startUpTasks.Add((IStartupTask)Activator.CreateInstance(startUpTaskType));
//sort Order
startUpTasks = startUpTasks.AsQueryable().OrderBy(st => st.Order).ToList();
foreach (var startUpTask in startUpTasks)
startUpTask.Execute(); // Execute
}
まとめ:
以上の分析により、IstartupTaskアーキテクチャを使用して追加のシステムデータ初期化を実現する方法を把握することができる.現在の3つのStartupTaskを振り返る
EfstartupTaskはデータベースデータの初期化に用いられる.AdminStratupTaskは現在、Telerikコントロールの言語ローカライズ登録にのみ使用されています.AutoMapper Startupは、AutoMapperからOOマッピングを作成するために使用されます.
public interface IStartupTask
{
void Execute();
int Order { get; }
}
public int Order // Order Interface implementation Class 。
{
get { return 0; }
}
namespace Nop.Data
{
public class EfStartUpTask : IStartupTask
{
public void Execute()
{
if (!DataSettingsHelper.DatabaseIsInstalled())
return;
var settings = EngineContext.Current.Resolve<DataSettings>();
if (settings != null && settings.IsValid())
{
var provider = EngineContext.Current.Resolve<IEfDataProvider>();
if (provider == null)
throw new NopException("No EfDataProvider found");
provider.SetDatabaseInitializer();//
}
}
public int Order
{
//ensure that this task is run first
get { return -1000; }
}
}
}
private void RunStartupTasks()
{
// namespace Nop.Core.Infrastructure.DependencyManagement. ContainerManager
//
var typeFinder = _containerManager.Resolve<ITypeFinder>();
// IstartupTask
var startUpTaskTypes = typeFinder.FindClassesOfType<IStartupTask>();
var startUpTasks = new List<IStartupTask>();
foreach (var startUpTaskType in startUpTaskTypes)
//Activator.createInstance Instance
startUpTasks.Add((IStartupTask)Activator.CreateInstance(startUpTaskType));
//sort Order
startUpTasks = startUpTasks.AsQueryable().OrderBy(st => st.Order).ToList();
foreach (var startUpTask in startUpTasks)
startUpTask.Execute(); // Execute
}