从入门到放弃,.net构建博客系统(二):依赖注入
文章目录:《从入门到放弃,.net构建博客系统》
- 从入门到放弃,.net构建博客系统(一):系统构建
- 从入门到放弃,.net构建博客系统(二):依赖注入
上一篇中有讲到项目启动时会进行ioc的依赖注入,但具体是怎么注入的呢?我们先一步步往下走
一、注册autofac配置
首先bootstraper会进行初始化,接着将当前mvc控制器工厂改为AutofacControllerFactory。
1 public class AutofacConfig 2 { 3 /// <summary> 4 /// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建 5 /// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作 6 /// </summary> 7 public static void Register() 8 { 9 Bootstrapper boot = new Bootstrapper(); 10 boot.Start(); 11 12 //将MVC的控制器对象实例 交由autofac来创建 13 ControllerBuilder.Current.SetControllerFactory(new AutofacControllerFactory()); 14 } 15 }
View Code
二、bootstraper开始注册服务
在注册服务前,我们先定义一个容器生成器ContainerBuilder,用以注册服务;接着我们会获取当前项目所有引用的程序集,对其中的类型进行判断,如果符合条件就会注册进去。那哪些类型会注册进去呢?
有三种:
1. IDependency,仓储层和服务层的接口都继承该接口,注册的服务会在容器每次resolve的时候,生成一个新对象
2. ISignleton,日志和缓存接口继承该接口,每次解析都会返回统一对象,即单例对象
3. Module,其中暴露了ContainerBuilder对象,由模块自定义注册方式,项目中webapp层有个MvcControllerModule,用于将所有实现IController给注册进去
1 public void Start() 2 { 3 Type baseType = typeof(IDependency); 4 5 // 获取所有相关类库的程序集 6 Assembly[] assemblies = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToArray(); 7 8 containerBuilder.RegisterAssemblyTypes(assemblies).Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract) 9 .AsImplementedInterfaces().InstancePerDependency();//每次解析获得新实例 10 11 Type singletonType = typeof(ISignleton); 12 containerBuilder.RegisterAssemblyTypes(assemblies).Where(type => singletonType.IsAssignableFrom(type) && !type.IsAbstract) 13 .AsImplementedInterfaces().SingleInstance();// 保证对象生命周期基于单例 14 15 containerBuilder.RegisterAssemblyModules(assemblies);//所有继承module中的类都会被注册 16 17 var container = containerBuilder.Build(); 18 ContainerManager.SetContainer(container); 19 }
View Code
依赖注册好后,会生成IOC容器,接着将容器管理器的IOC容器设置为该容器,以后所有的服务的解析可以通过管理器来解析。
三、自定义Autofac控制器工厂
第一步中我们将控制器工厂改为AutofacControllerFactory,这个控制器工厂重写了GetControllerInstance,主要在解析控制器类型时,用ContainerManager去解析控制器类型,这样就能把控制器中的依赖给注入进去。
1 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 2 { 3 if (controllerType == null) 4 { 5 return base.GetControllerInstance(requestContext, controllerType); 6 } 7 8 return ContainerManager.Resolve(controllerType) as IController; 9 }
View Code
demo:http://tonyblogs.top/
Git源码:https://github.com/Halifa/TonyBlogs
如本文对您有帮助请移步右下角,推荐本文,谢谢大家的点赞,因为您的支持是我最大动力
转载于:https://www.cnblogs.com/shinly/p/7351799.html
从入门到放弃,.net构建博客系统(二):依赖注入相关推荐
- python入门指南bl-Python Flask开源博客系统Bl
本博文在51CTO技术博客首发. 开源不易,Python良心之作,真心送给广大朋友,恳请给予支持,不胜感激! 大家可以从下面的地址中去体验Blog_mini的功能,我把副本部署在了腾讯云上供大家使用: ...
- golang入门项目——Gin框架简易博客系统1.0
文章目录 开发前的准备 需求分析 项目截图 代码 开发前的准备 需要集成markdown编辑器 下载地址 需求分析 1.能够实现用户的注册与登录 2.能够编写并保存博客 3.能够对保存的博客进行展示 ...
- 手把手带你搭建个人博客系统(二)
⭐️前言⭐️ 因文章篇幅较长,所以整个流程分两篇文章来完成.
- 博客系统知多少:揭秘那些不为人知的学问(三)
点击上方关注"汪宇杰博客" 上篇<博客系统知多少:揭秘那些不为人知的学问(二)>介绍了博客的基本功能设计要点,本篇介绍博客的协议或标准. 1."博客" ...
- Ubuntu服务器上搭建solo个人博客系统
最近想要尝试一下搭建一个个人博客来记录自己的学习和生活,因此选择了基于java的solo博客系统来尝试搭建一下,主要的步骤有: 购买服务器 购买域名及备案 安装博客程序 通过github登录博客后台设 ...
- 免费打造个人博客系统
自媒体越来越受重视,写作能力也变得更加重要,但万事开头难,第一步:构建一个人文章发布平台,都难道不少人,今天介绍一种免费搭建个人博客系统的方法,不仅能成为自己写作平台,还可以将文章轻松发布到其他公共平 ...
- django初探-创建简单的博客系统(一)
django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...
- codewarrior 入门(来源于逍遥呤博客)
codewarrior 入门(来源于逍遥呤博客) (2009-08-08 12:12:15) 转载 标签: 杂谈 分类: ARM系列 1.首先是要建立工程,new->ARM Executable ...
- 博客系统ZBLOG打赏插件构建:设置支付宝和微信接口[图]
2019独角兽企业重金招聘Python工程师标准>>> 对于爱写博客的朋友们来说,ZBLOG系统是国内出名的优秀博客系统,非常适合中小型站长和博主们写作,对于我们来说,博客的质量一般 ...
最新文章
- 【性能优化】小伙伴问我性能指标监控怎么做,这次我安排上了!!
- springboot打包成jar包后找不到xml,找不到主类的解决方法
- python发明者叫什么-编程语言简史:有人不喜欢花括号,于是他发明了 Python
- juniper交换机 mac地址和端口绑定
- SD从零开始14 定价中的特殊功能(Special Functions)
- Ubuntu 18.04 + Anaconda 5.2 + Pycharm
- c语言case可以判断多个条件吗,case 多个条件
- mvvm 耗时加载进度条_ZK的实际应用:MVVM –加载和渲染数据
- SqlServer为什么自动在主键上建立聚集索引
- 马化腾最新演讲谈机遇:让所有企业在云端利用AI处理大数据
- 基于SURF特征的目标检测
- 一条SQL语句查询出成绩名次 排名 (转)
- Android实现保存图片和视频到系统相册
- postman小技巧-提取变量及设置变量
- MySQL 之 The definition of table 'p' prevents operation UPDATE on table 'post'.
- python自然语言的背景_Python自然语言工具包(NLTK)入门
- 机械电气自动化常用知识手册
- 驱动程序开发:多点电容触摸屏
- 蔡盈芳:企业数字档案馆整体架构及其层次模型研究
- Win10怎么关闭smartscreen筛选器检测功能?
热门文章
- 【最佳实践】Elasticsearch Snapshot 备份的使用方法
- 重磅发布 | 承载亿级流量的开发框架,闲鱼Flutter技术解析与实战大公开
- 深度前沿:对话管理模型研究最新进展
- ubuntu mysql 迁移_(最新)ubuntu20.04LTS版迁移mysql8.0数据库的方法
- 数据库面试题【十一、InnoDB引擎的4大特性】
- Nginx与Tomcat区别
- 零基础学Python(第七章 while循环)
- 零基础学Python(第六章 if条件语句)
- innobackupex中--slave-info参数的含义和适用场景
- 小米11pro和vivox60哪个好