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

  • 相关阅读:
    探索数据
    Python基础15
    Jupyter Notebook 打开方法
    03-目录结构
    02-安装 CentOS7
    12-EndWithEstore
    11-Upload&Download
    10-Listener&Filter
    09-JDBC
    08-MVC&JavaBean
  • 原文地址:https://www.cnblogs.com/wdwyy/p/3294367.html
Copyright © 2011-2022 走看看