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)执行完毕。
Nop源码分析二的更多相关文章
- Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题
4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...
- 框架-springmvc源码分析(二)
框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftth ...
- Tomcat源码分析二:先看看Tomcat的整体架构
Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Conn ...
- 十、Spring之BeanFactory源码分析(二)
Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...
- Vue源码分析(二) : Vue实例挂载
Vue源码分析(二) : Vue实例挂载 author: @TiffanysBear 实例挂载主要是 $mount 方法的实现,在 src/platforms/web/entry-runtime-wi ...
- 多线程之美8一 AbstractQueuedSynchronizer源码分析<二>
目录 AQS的源码分析 该篇主要分析AQS的ConditionObject,是AQS的内部类,实现等待通知机制. 1.条件队列 条件队列与AQS中的同步队列有所不同,结构图如下: 两者区别: 1.链表 ...
- ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...
- spring源码分析(二)Aop
创建日期:2016.08.19 修改日期:2016.08.20-2016.08.21 交流QQ:992591601 参考资料:<spring源码深度解析>.<spring技术内幕&g ...
- ConcurrenHashMap源码分析(二)
本篇博客的目录: 一:put方法源码 二:get方法源码 三:rehash的过程 四:总结 一:put方法的源码 首先,我们来看一下segment内部类中put方法的源码,这个方法它是segment片 ...
随机推荐
- Slave作为其它Slave的Master时使用
主从配置需要注意的点 (1)主从服务器操作系统版本和位数一致: (2) Master和Slave数据库的版本要一致: (3) Master和Slave数据库中的数据要一致: (4) Master开启二 ...
- session的安全性
提到session,大家肯定会联想到登录,登录成功后记录登录状态,同时标记当前登录用户是谁.功能大体上就是这个样子,但是今天要讲的不是功能,而是实现.通过探讨session的实现方式来发掘一些可能你之 ...
- jQuery命名空间,插件开发
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- eclipse SE增加Web开发插件;安装配置Apache
在eclipse SE版本点击"Help"--"Install New Software..."--"Work with"中输入" ...
- Xshell远程连接工具
下载地址:http://rj.baidu.com/soft/detail/15201.html?ald Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft ...
- HTML JQuery 技巧总结
元素之间的操作 $(".level1").children() 获取到所有相邻的子元素$(".level1").children("a") ...
- linq join的lambda写法
var query = _db.Bank_CommercialOpus .Join(_db.Bank_Opus, s => s.OpusID, Opus => Opus.ID, (s, O ...
- MYSQL提权总结
最近在测试一个项目,遇到了MYSQL数据库,想尽办法提权,最终都没有成功,很是郁闷,可能是自己很久没有研究过提权导致的吧,总结一下MYSQL提权的各种姿势吧,权当复习了.关于mysql提权的方法也就那 ...
- 《阿Q正传》读后感
kindle大法好. 利用坐车的时间阅读完了鲁迅先生写的<阿Q正传>, 心中感慨良多, 记下等以后翻看这些摸不着的回忆吧. 我没看过实体书版, 电子书版的<阿Q正传>注解很详细 ...
- java new Date()得到的时间和系统时间不一样
造成这种问题的原因是:操作系统时区跟JVM的时区不一致. [root@paas244 ~]# timedatectl Local time: Thu 2016-12-29 15:35:44 CST U ...