专栏首页GuZhenYinASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)

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 条评论
登录 后参与评论

相关文章

  • C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码

    前言 什么是Xamarin? Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单。 Xamarin的产品简化了针对多种平台的应用开发,包括i...

    GuZhenYin
  • 使用Entity Framework Core访问数据库(Oracle篇)

    本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。

    GuZhenYin
  • 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点

    using System; using System.Collections.Generic; using System.Configuration; usin...

    GuZhenYin
  • spring(2)装配Bean

    http://blog.csdn.net/pacosonswjtu/article/details/51518337#comments

    bear_fish
  • O2-开源框架使用之Picasso

    张风捷特烈
  • 腾讯智启学堂走进校园 玉龙中学编程课引专家团观摩

    ? 2019年11月7日,由南方科技大学、香港大学的专家学者们组成的人工智能教育应用考察团在深圳市龙华区玉龙中学,观摩了一场别开生面的编程课,并对龙华区的青少...

    腾讯智慧教育
  • 我的编码习惯 - 配置规范

    工作中少不了要制定各种各样的配置文件,这里和大家分享一下工作中我是如何制定配置文件的,这是个人习惯,结合强大的spring,效果很不错。

    哲洛不闹
  • 快手数据分析-2018届春招校招

    牛客网
  • 腾讯数据平台部总监刘煜宏:这5大产品平台,展示了腾讯大数据的核心能力

    12月13日,“2017互联网+大数据高峰论坛”在北京中国大饭店拉开帷幕。来自政府、研究机构及高校、企业的大数据专业人士共聚一堂,以“慧聚数据之力,赋能智慧政...

    腾讯技术工程官方号
  • 数据库复习题 考试题库(应用题)

    其中,供应商表S由供应商号(SNO)、供应商姓名(SNAME)、供应商所在城市(CITY)组成,记录各个供应商的情况;零件表P由零件号(PNO)、零件名称(PN...

    Debug客栈

扫码关注云+社区

领取腾讯云代金券