zoukankan      html  css  js  c++  java
  • Nop源码分析二

    上文我们已经通过该行代码:var typeFinder = containerManager.Resolve<ITypeFinder>(); 从注入容器中获取到了typeFinder实例。

    通过该实例进行以下操作。

     var drTypes = typeFinder.FindClassesOfType<IDependencyRegistrar>(); 从bin所有程序集中获取实现了IDependencyRegistrar接口的所有实现类。循环这些实现类病调用 void Register(ContainerBuilder builder, ITypeFinder typeFinder);方法来做其他事情。

    通过反射能够获取到8个实现了该接口的实例,下面我们一个个分析,实现了这些接口的类都做了什么事情。

    1,DependencyRegistrar : IDependencyRegistrar

        A:注册HTTP context and other related stuff,

       B:注册WebHelper。 builder.RegisterType<WebHelper>().As<IWebHelper>().InstancePerHttpRequest();

       C:注册程序集中的所有控制器。  builder.RegisterControllers(typeFinder.GetAssemblies().ToArray());

       D:注册和数据访问层相关的类。

      E:注册插件和缓存相关的类。

      F:注册worker和store相关的类。

    G:注册所有实现类。

    H:注册和客户相关的类:consumers = typeFinder.FindClassesOfType(typeof(IConsumer<>)).ToList();

    I:注册发布订阅服务类:

                builder.RegisterType<EventPublisher>().As<IEventPublisher>().SingleInstance();
                builder.RegisterType<SubscriptionService>().As<ISubscriptionService>().SingleInstance();

    2,注册和税相关的组件:

          DependencyRegistrar : IDependencyRegistrar

        builder.RegisterType<TaxRateService>().As<ITaxRateService>().InstancePerHttpRequest();

    3,注册和google相关的服务。

    4,注册:  builder.RegisterType<OpenIdProviderAuthorizer>().As<IOpenIdProviderAuthorizer>().InstancePerHttpRequest();
                builder.RegisterType<OpenIdRelyingPartyService>().As<IOpenIdRelyingPartyService>().InstancePerHttpRequest();

     5,注册            builder.RegisterType<FacebookProviderAuthorizer>().As<IOAuthProviderFacebookAuthorizer>().InstancePerHttpRequest();

    6,   builder.RegisterType<HomeController>()
                    .WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"));

    7,注册一些控制器和            builder.RegisterType<InstallationLocalizationService>().As<IInstallationLocalizationService>().InstancePerHttpRequest();

    8,注册一个和重量相关的服务类。

    9,注册broker类。

    至此所有容器注入的工作全部完成,下面开始初始化一些工作。

    所有的工作全部在  RunStartupTasks();方法中完成。

    startUpTaskTypes = typeFinder.FindClassesOfType<IStartupTask>(); 该行代码获取程序集中所有实现了IStartupTask接口的的类。

    循环遍历实现类,并执行Execute()方法。来完成所有的初始化工作,代码如下:

     foreach (var startUpTask in startUpTasks)
                    startUpTask.Execute();

    1,EfStartUpTask : IStartupTask :ef相关的初始化,存储过程,函数索引等。

    2,初始化GoogleProductObjectContext等。

    3,初始化AutoMapperStartupTask,实体好模型的自动映射类。

    4,set localization service for telerik 。

    至此initialize engine context的工作全部完成。
                EngineContext.Initialize(false)执行完毕。

  • 相关阅读:
    dutacm.club_1094_等差区间_(线段树)(RMQ算法)
    dutacm.club_1087_Common Substrings_(KMP)_(结合此题通俗理解kmp的next数组)
    dutacm.club_1089_A Water Problem_(dp)
    14年第五届蓝桥杯第八题_地宫取宝_(记忆化搜索)
    14年第五届蓝桥杯第七题_蚂蚁感冒_(思维)
    dutacm.club_1085_Water Problem_(矩阵快速幂)
    HDU_2476_String painter_(区间dp)
    第五届蓝桥杯校内选拔第七题_(树型dp)
    第五届蓝桥杯校内选拔第六题_(dfs)
    15年第六届蓝桥杯第九题_(矩阵快速幂优化的动态规划)
  • 原文地址:https://www.cnblogs.com/SeaTop/p/5514041.html
Copyright © 2011-2022 走看看