zoukankan      html  css  js  c++  java
  • NopCommerce 1. NopCommerce Application_Start启动过程

    这里简单介绍整个启动过程,其他具体的后续讲解

    从Application_Start中执行开始,一开始执行EngineContext.Initialize(false);

    EngineContext 是对IEngine接口的一个封装,NopEngine则实现了IEngine接口,NopEngine主要是封装了依赖注入(autofac)和AutoMapper的方法,它可以方便呢的注册依赖注入和automapper,并且对外提供Resolve来解析

    1. NopConfig:读取web.config配置

    改类是实现对web.config中的自定义section NopConfig的内容的封装

    NopConfig实现了IConfigurationSectionHandler.Create(),主要操作是将xmlNode的属性获取并设置到NopConfig中定义的属性中,之后就可以直接使用NopConfig获取这些配置信息

    2. Singleton类,实现单例模式

    该类内部是一个静态字段的IDictionary<Type,object>缓存

    继承类之一Singleton<T>提供Instance 来获取和是设置IDictionary<Type,object>字段来实现单例获取和设置实例

    3. IEngine 接口

    该接口非常重要,主要对外提供autofac的解析服务

    内部其实是实现了autofac依赖注入和automapper的注册

    4. IEngine的实现类NopEngine对autofac的封装

    System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 方法来设置DR

    封装在RegisterDependencies(config)方法中,首先定义一个ContainerBuilder 实例,然后通过SetResolver来注册.

    这里涉及到IDependencyRegistrar,该接口定义了Register方法,这样每个程序集中都可以实现该接口的Regiseter方法来提供具体的注册,并在此处利用反射获取这些实现类,然后统一注册

    通过完成这一步之后,NopEngine又封装了autofac的Resolve方法,来提供对接口和类的实现类的解析工作

    5.  NopEngine中AutoMapper的注册

    这里主要涉及的接口是IMapperConfiguration,该接口提供GetConfiguration方法

    基本思路也是利用反射,得到所有IMapperConfiguration的实现类,然后执行GetConfiguration,再调用AutoMapperConfiguration.Init()初始化这一步的返回值,这样就完成了AutoMapper的注册

    6. NopEngine中启动IStartupTask

    涉及到IStartupTask接口,提供一个Execute方法

    利用反射可以找到6个实现类

    1. EfStartUpTask

             SetDatabaseInitializer()方法实现对数据库的初始化,主要是将~/App_Data/Install/SqlServer.Indexes.sql 或SqlServer.StoredProcedures.sql 中的sql语句执行

    7. 对ViewEngines 添加自定义ThemeableRazorViewEngine

    主要涉及的接口是IViewEngine,提供了FindView(),FindPartialview(),ReleaseView() 三个方法

    IViewEngine ->

               VirtualPathProviderViewEngine –>

                         ThemeableVirtualPathProviderViewEngine –>

                                    ThemeableRazorViewEngine

    8. 设置MetadataProvider

    System.Web.Mvc.ModelMetadataProviders.Current = new NopMetadataProvider();

    9. 路由设置

    1. Area注册,主要是为Nop.Admin注册后台页面的路由

           本质是向RouteTable中添加一条RouteData的记录而已

    2. 默认路由注册

           其中的IgnoreRoute也是添加一条RouteData记录

           主要涉及Nop.Web的路由注册,以及插件的路由注册

           IRoutePublish接口封装了对IRouteProvider接口,能够帮助完成路由注册操作

           插件路由注册是通过反射获取IRouteProvider接口的实现类,然后执行其中的RegisterRoutes()方法来注册路由

            IRouteProvider非常重要,是所有的路由的注册信息所在

    10. 添加Fluent Validation

    ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new NopValidatorFactory()));

    NopValidatorFactory 类继承了AttributedValidatorFactory,重写了GetValidator方法,该方法主要是获取要验证的Model的定义的Attribute属性,这些Attribute都是实现了FluentValidation.IValidator接口

    在IValidator接口的实现类的构造函数中使用RuleFor()来对属性进行验证

    这就是
  • 相关阅读:
    CodeForces
    网络流
    poj 2185
    树的分治学习
    数位DP
    URAL 1969. Hong Kong Tram
    hdu 4759 Poker Shuffle
    hdu3712 Detector Placement
    分块思想
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/zhangrCsharp/p/7681257.html
Copyright © 2011-2022 走看看