从入门到放弃,.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     }

二、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         }

依赖注册好后,会生成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         }

demo:http://tonyblogs.top/

Git源码https://github.com/Halifa/TonyBlogs

如本文对您有帮助请移步右下角,推荐本文,谢谢大家的点赞,因为您的支持是我最大动力

时间: 2024-10-13 01:48:23

从入门到放弃,.net构建博客系统(二):依赖注入的相关文章

从入门到放弃,.net构建博客系统(一):系统构建篇

demo:http://tonyblogs.top/ Git源码:https://github.com/Halifa/TonyBlogs 项目采用的技术有:asp.net mvc4 + autofac + ormlite + mysql + metronic + jquery.datatable + vue 一.项目分层 1. TonyBlogs.Framework,主要实现了框架的依赖注入,定义了依赖的生命周期 2. TonyBlogs.Entity,主要是数据表的实体对象,以Entity为后

使用Flask和Bootstrap构建博客系统(1) - 准备篇

技术栈 macOS10.12.5 Python2.7.13 Bootstrap4.0.0-beta.2 virtualenv virtualenvwrapper 安装Python2.7.13 下载Bootstrap4.0.0-beta.2 安装virtualenv 用pip进行安装: $ pip install virtualenv 我采用virtualenvwrapper来管理虚拟环境,可以不用直接配置virtualenv.Virtaulenvwrapper是virtualenv的扩展包,用于

github快速入门教程以及搭建个人博客网站

一:下载github 二:安装GitHub 下载之后点击 进行安装过程,安装之后桌面上会有两个图标,如下图 三:新建项目 GitHub是图形界面模式,Git Shell是命令行模式,在Windows系统下我们使用GitHub进行代码管理.1:打开GitHub图形界面,输入用户名密码或注册新账号,如下图: 2:登录之后新建项目 点击左上角 进行新建项目,如下图所示: 新建之后如下图所示: 在电脑上查找刚才所选择的路径,会发现在该路径下会新建一个"Temp"文件夹,如下图所示: 点击软件右

一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

原文地址: http://www.cnblogs.com/daxnet/p/6139317.html 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些与编程和开发相关的文章.从入行到现在,我至始至终乐于与网友分享自己的所学所得,希望会有更多的同我一样的业内朋友能够在事业上取得成功,也算是为我们的软件事业贡献自己的一份力量吧,这也是我在博客园建博客

基于Microsoft Azure、ASP.NET Core和Docker的博客系统

欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网")个人空间发布过一些与编程和开发相关的文章.从入行到现在,我至始至终乐于与网友分享自己的所学所得,希望会有更多的同我一样的业内朋友能够在事业上取得成功,也算是为我们的软件事业贡献自己的一份力

02-大鸭梨博客系统数据库设计及Dapper的使用

毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配合.数据库设计是整个系统的根基,它关乎系统功能的实现.稳定性.扩展性等多个方面,可见数据库设计的重要性. 那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点: 1.充分体现系统的需求 不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业

从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件

一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页面: 技术博客风格: 详情页风格: 详情页留言风格: 1.3后台风格: 表格风格: 博客发布风格: 以上看到的系统页面是目前系统完成的风格,以后页面设计都参考这些页面风格. 二.使用前端web框架以及插件说明 2.1选择前端web框架,我找了很多框架,以前学过自学过bootstrap觉得对于没有前端

CentOS6系统部署mysql+php+wordpress博客系统

部署wordpress博客系统在不同的系统中可能就稍有不同,但是大同小异,所以今天就以CentOS6系统为例进行wordpress博客系统的部署. 在部署之前首先要进行软件的安装,在配置好软件源之后,使用以下命令: CentOS 7中执行: yum install httpd  php  php-mysql  mariadb-server CentOS 6中执行: yum install httpd  php  php-mysql  mysql-server 安装完之后,首先使用以下命令重启ht

基于React服务器端渲染的博客系统

系统目录及源码由此进入 目录 1. 开发前准备 1.1 技术选型1.2 整体设计1.3 构建开发 2. 技术点 2.1 react2.2 redux, react-router2.3 server-render 3. 总结 正文 1. 开发前准备 1. 1 技术选型 对于个人的博客系统而言,服务器计算能力往往不是需要考虑,而其中的 I/O 操作是比较复杂的,同理对前端的交互要求也是较高的,所以这次主要还是围绕 Node系 ,React系 框架进行开发.对于 2016 年后的互联网产品, Reac