Nop-通过IStartupTask实现代码执行<六>
2012-03-06 11:08
741 查看
Nop-通过IStartupTask实现代码执行<六>
分类: Nop Commerce2012-02-2315:38 12人阅读 评论(0) 收藏 举报
通过IStartupTask实现初始化任务
来自norp.Core的接口IStartupTaskpublic 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架构来实现额外的系统数据初始化;回顾目前的三个StartupTask
EfstartupTask用于数据库数据的初始化;AdminStratupTask目前仅用于Telerik控件的语言本地化注册;AutoMapperStartup是用于通过AutoMapper创建OO映射的。
相关文章推荐
- Nop-通过IStartupTask实现代码执行<六>
- Unity3D ShaderLab <六>通过改变纹理的UV坐标实现简单的水流效果
- Android实战简易教程<五十四>(通过实现OnScrollListener接口实现下拉刷新功能)
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检測程序执行和函数调用次数计数
- Android UI设计之<六>使用HTML标签,实现在TextView中对部分文字进行加粗显示
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- <iOS>iPhone 应用里实现截屏功能的代码
- List<> 转换为Dataset的C#代码实现 解决Nullable问题
- Android实战简易教程<五十三>(通过实现OnScrollListener接口实现上拉加载更多功能)
- Android代码实现APK的下载安装和卸载<1>
- 《逆向工程核心原理》<04-33> 通过DLL注入修改API代码实现API钩取的技术
- Nop-Profiler的改进方向,通过Miniprofiler设置仅对某些条件下的访问开放profiler trace<七>
- Java NIO原理图文分析及代码实现<转>
- novaclient代码解析之---通过nova show <server-id>命令解析Nova client与Nova API之间的调用关系
- Nop-Profiler的改进方向,通过Miniprofiler设置仅对某些条件下的访问开放profiler trace<七>
- 数据挖掘--kmeans聚类算法mapreduce实现代码<转>
- share中简单聊天界面的实现<代码>
- 使用PHP实现密保卡功能实现代码<打包下载直接运行>
- NativeTask:利用本地执行引擎加速Hadoop &lt;转&gt;
- java二维码生成与解析代码实现 <转载自http://blog.csdn.net/about58238/article/details/7494704>