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)执行完毕。

  • 相关阅读:
    stenciljs 学习四 组件装饰器
    stenciljs 学习三 组件生命周期
    stenciljs 学习二 pwa 简单应用开发
    stenciljs ionic 团队开发的方便web 组件框架
    stenciljs 学习一 web 组件开发
    使用npm init快速创建web 应用
    adnanh webhook 框架 hook rule
    adnanh webhook 框架 hook 定义
    adnanh webhook 框架request values 说明
    adnanh webhook 框架execute-command 以及参数传递处理
  • 原文地址:https://www.cnblogs.com/wdwyy/p/3294367.html
Copyright © 2011-2022 走看看