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

  • 相关阅读:
    springboot集成websocket
    验证regex表达式本身是否有问题
    Quartz Cron表达式 生成
    Cannot run program "python": CreateProcess error=2, 系统找不到指定的文件
    遇到多个构造器参数时,要考虑用构造器
    考虑使用静态工厂代替构造器
    idea自定义注释
    layui2.4.0前的table隐藏列
    002、获取屏幕大小
    001、关于TextView的一些小知识
  • 原文地址:https://www.cnblogs.com/SeaTop/p/5514041.html
Copyright © 2011-2022 走看看