ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)

前言

IOC的重要性 大家都清楚..便利也都知道..新的ASP.NET Core也大量使用了这种手法..

一直憋着没写ASP.NET Core的文章..还是怕误导大家..

今天这篇也不是讲Core

 前面写了C#开发移动应用系列  就第一篇和最后一篇上了最多推荐 - -  也许大家确实不看好吧..

算了..废话不多说.开始今天的东西吧..

 本篇文章不讲为何我们要用IOC..只讲Autofac使用中的一些小心得

正文

1.基本注入

首先我们要构造一个容器,代码如下:

//第一步: 构造一个AutoFac的builder容器
ContainerBuilder builder = new ContainerBuilder();

第二步..注入自己需要的服务和继承关系.  类似下面:

//注入仓储
builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>)).InstancePerLifetimeScope();

嗯..这里解释一下是什么意思..

RegisterGeneric 注入你的服务类,后面的As则是你服务类继承的接口.

InstancePerLifetimeScope为你注入的这个服务的生命周期.(注:生命周期我们后面讲)

2.控制器注入

采用属性注入的方式,注入控制器

//注入控制控制器
builder.RegisterControllers(assemblys.ToArray()).PropertiesAutowired().InstancePerLifetimeScope();

嗯..这里面的assemblys.ToArray().. 就是一些你要注入到控制器里面的程序集..

嗯 我是直接通过统一接口 然后批量注入..你们自己随意..

PropertiesAutowired()的意思就是采用属性注入的方式

3.特性注入

我们在使用MVC的时候,肯定会用到特性..肯定会有一些自己定义的特性..那么这些特性里面要用到相关的服务,该怎么注入呢..如下:

//注入特性
 builder.RegisterFilterProvider();

是的.. 你没看错..MVC里面就一句话就行了..特性里面就可以取到想要的服务了..(注:WebAPI不可以,具体请查官方文档)

4.生成容器并提供给MVC

代码如下:

//通过容器配置生成容器. 
 var container = builder.Build();
 //提供给MVC
 DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

5.一些杂七杂八

//注入类用这个
builder.RegisterType(要注入的类型)
//注入泛型类用这个
builder.RegisterGeneric(要注入的类型)

6.关于生命周期

InstancePerDependency()

瞬时,嗯..就是服务对于每次请求都会返回单独的实例

InstancePerLifetimeScope()

基于线程或者请求的单例..嗯 就是一个请求 或者一个线程 共用一个

SingleInstance()

嗯..没别的 就是单例.. 整个项目公用一个

InstancePerRequest()

嗯..针对MVC的,或者说是ASP.NET的..每个请求单例

 到此就结束了.

最后

嗯..内容不多,胜在实用..分享一下吧, 有问题的地方希望大神指正一下,也顺便是自己的一个记录吧..

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

Spring4+SpringMVC+MyBatis整合思路

这个很简单,只需要web容器中注册org.springframework.web.context.ContextLoaderListener,并指定spring...

602
来自专栏用户2442861的专栏

使用IntelliJ IDEA 15和Maven 开发Spring Data JPA + MVC Web应用

http://blog.csdn.net/myarrow/article/details/50827370

761
来自专栏菩提树下的杨过

spring cloud:config-server中@RefreshScope的"陷阱"

spring cloud的config-serfver主要用于提供分布式的配置管理,其中有一个重要的注解:@RefreshScope,如果代码中需要动态刷新配置...

3497
来自专栏Java面试通关手册

从分析我抓取的60w知乎网民来学习如何在SSM项目中使用Echarts

去年在接触Java爬虫的时候,接触到了一个关于知乎的爬虫。个人觉得写的非常好,当时抓取的效率和成功率还是特别特别高,现在可能知乎反扒做的更好,这个开源知乎爬虫没...

1133
来自专栏别先生

Spring之注解实现aop(面向切面编程)

1:Aop(aspect object programming)面向切面编程,名词解释:     1.1:功能:让关注点代码与业务逻辑代码分离     1.2:...

21210
来自专栏技术墨客

Spring核心——Profile管理环境 原

在介绍Spring核心模块为运行环境管理提供的功能之前,咱们先得解释清楚“运行环境”是什么。

613
来自专栏后台及大数据开发

springBoot系列教程07:异常捕获

发生异常是很正常的事,异常种类也是千奇百怪,发生异常并不可怕,只要正确的处理,并正确的返回错误信息并无大碍,如果不进行捕获或者处理,分分钟服务器宕机是很正常的事

873
来自专栏龙首琴剑庐

Spring4+Spring MVC+MyBatis整合思路

1、Spring框架的搭建 这个很简单,只需要web容器中注册org.springframework.web.context.ContextLoaderList...

2975
来自专栏JadePeng的技术博客

基于spring security 实现前后端分离项目权限控制

前后端分离的项目,前端有菜单(menu),后端有API(backendApi),一个menu对应的页面有N个API接口来支持,本文介绍如何基于spring se...

680
来自专栏C#

跨平台的.NET邮件协议MailKit组件解析

    发起的.NET Core开源组织号召,进展的速度是我自己也没有想到的,很多园友都积极参与(虽然有些人诚心砸场子,要是以我以前的宝脾气,这会应该被我...

1897

扫码关注云+社区