Nop-通过IStartupTask实现代码执行<六>
来源:互联网 发布:温湿度监控软件下载 编辑:程序博客网 时间:2024/05/03 04:10
通过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架构来实现额外的系统数据初始化;回顾目前的三个StartupTask
EfstartupTask用于数据库数据的初始化;AdminStratupTask目前仅用于Telerik控件的语言本地化注册;AutoMapperStartup是用于通过AutoMapper创建OO映射的。
- Nop-通过IStartupTask实现代码执行<六>
- Nop-通过IStartupTask实现代码执行<六>
- NOP
- VC++ 通过IHTMLINTEFACE 接口实现网页执行自定义js代码
- 通过java代码实现dos环境下多条命令的执行
- Java通过缓存队列执行任务代码实现
- 通过代码实现autoresizing
- 通过分析SQL语句的执行计划优化SQL(六)
- 通过bat或shell执行java代码
- php 通过代码定时执行功能
- 通过Java代码执行shell命令/脚本
- PHP实现通过Web执行C/C
- PHP实现通过Web执行C/C
- 固定执行计划--通过OUTLINE实现
- 固定执行计划--通过 SQL profile实现
- 练习代码(六)通过异常处理错误
- 六行代码实现无组件上传
- C++代码札记(六)实现近似值算法
- Android查看sqlite数据库内容的方法
- 灯鹭推出“社会化评论功能”,评论可同步到8大社会化媒体
- Android 用sharepreference在各个程序之间共享数据
- delphi数据库定位getbookmark
- Windows与VC命名规则
- Nop-通过IStartupTask实现代码执行<六>
- hibernate注解大全
- Thrift 安装与配置
- jQuery事件委托( bind() \ live() \ delegate()) [委托 和 绑定的故事]
- java垃圾回收之Minor GC和Major GC
- 为何RVM设置ruby时加default导致找不到ruby
- 转发
- 计算机经典书籍汇总
- python字符串操作