首页 > 编程语言 >ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)

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

时间:2024-09-26 19:46:17浏览次数:1  
标签:Autofac ASP container .. builder MVC public 注入

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的..每个请求单例

 

 到此就结束了.

 

 

最后

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

作者:顾振印 出处:http://www.cnblogs.com/GuZhenYin/ 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面   分类: ASP.NET MVC 好文要顶 关注我 收藏该文 微信分享 GuZhenYin 
粉丝 - 1186 关注 - 15
会员号:2714     +加关注 9 0       « 上一篇: C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))
» 下一篇: 应用程序的8个关键性能指标以及测量方法 posted @ 2017-07-07 15:56  GuZhenYin  阅读(7786)  评论(3)  编辑  收藏  举报   评论列表 默认|按时间|按支持数      回复 引用 #1楼 2017-07-07 17:41 那一剑风情 builder.Update(container); 提示已过时,请问有什么替代方法吗?
1 2 3 4 5 [Obsolete("Containers should generally be considered immutable. Register all of your dependencies before building/resolving. If you need to change the contents of a container, you technically should rebuild the container. This method may be removed in a future major release.")]     public void Update(IContainer container)     {       this.Update(container, ContainerBuildOptions.None);     }
支持(0) 反对(0)    回复 引用 #2楼 2017-07-08 11:01 xiao99 请教MVC控制器注入如何进行有参构造的注入?
代码如下:

1 2 3 4 5 6 7 8 9 public class WxController : System.Web.Mvc.Controller     { public IWxMessageHandlerContract WxMessageHandlerContract { getset; }   public ActionResult Index(string signature, string timestamp, string nonce, string echostr)         {               //这里进行对WxMessageHandlerService的构造参数赋值        }     }


1 2 3 4 5 public partial interface IWxMessageHandlerContract : IScopeDependency     {         }


1 2 3 4 5 6 7 8 9 10 11 12 13 14 public partial class WxMessageHandlerService : MessageHandler<WxMessageContext>, IWxMessageHandlerContract    {           /// <summary>        ///        /// </summary>        /// <param name="inputStream"></param>        /// <param name="postModel">接收腾讯postXML解析后的对象</param>        /// <param name="maxRecordCount"></param>        public WxMessageHandlerService(Stream inputStream, PostModel postModel, int maxRecordCount = 0) : base(inputStream, postModel, maxRecordCount)        {                    }  }


请教如何在WxController中WxMessageHandlerService的构造注入传参? 支持(0) 反对(0)    回复 引用 #3楼 2017-07-10 11:47 那一剑风情 @ xiao99
1 container.Resolve<IWxMessageHandlerContract>(new NamedParameter("inputStream", inputStream),new NamedParameter("postModel", postModel),new NamedParameter("maxRecordCount", 1));

标签:Autofac,ASP,container,..,builder,MVC,public,注入
From: https://www.cnblogs.com/sexintercourse/p/18434172

相关文章

  • WordPress LearnPress插件 SQL注入漏洞
     0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用......
  • DataSphere Studio & Linkis 单机部署
    一、环境要求参考文档:DataSphereStudio&Linkis单机一键部署文档相关软件包:百度网盘1.系统要求CentOS为6或者72.安装依赖命令命令依赖:telnet;tar;sed;dos2unix;mysql;yum;java;unzip;zip;expectyumprovides*/telnet#如果命令不存在通过此命令查看命令所属安装包......
  • DataSphere Studio AppConn 部署
    一、Exchangis AppConn 部署参考文档:https://github.com/WeBankFinTech/Exchangis/blob/master/docs/zh_CN/ch1/exchangis_appconn_deploy_cn.mdhttps://github.com/WeBankFinTech/Exchangis/blob/dev-1.0.0/docs/zh_CN/ch1/exchangis_deploy_cn.md1.安装zookeeper(单机版)tarx......
  • 「漏洞复现」用友U8 CRM config/relobjreportlist.php SQL注入漏洞
    0x01 免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需......
  • ASP.NET Core SignalR :学习消息通讯,实现一个消息通知
    ASP.NETCoreSignalR:学习消息通讯,实现一个消息通知  什么是SignalR    目前我用业余时间正在做一个博客系统,其中有个功能就是评论通知,就是假如A用户评论B用户的时候,如果B用户首页处于打开状态,那么就会提示B用户有未读消息。暂时用SignalR来实现这个功能。我也是......
  • 在 Windows 机器内使用 Fast API、React、Raspberry Pi 制作服务器应用程序
    系统规格处理器-i5第13代RAM-16GBSSD-Nvme500GB操作系统-WindowsHomeRaspberryPi-Pi48GB我有一个托管的FastAPI应用程序在Windows机器上,同一台机器上还有一个React应用程序。React应用程序使用fastAPI应用......
  • asp.net 上传大文件大小控制方案
    原文链接:https://blog.csdn.net/zdw_wym/article/details/7160942需要注意的是:在保存文件时,您应该确保指定文件的完整路径,并确保为ASP.NET使用的帐户提供要存储文件的目录的写权限。上载大文件时,可使用Web.Config元素的maxRequestLength属性来增加文件大小的最大允许值,例如:......
  • 谷歌地图 | Navigation SDK 重磅发布!为你的 App 注入导航新体验
    9月17日,Google地图正式发布NavigationSDKforAndroid和iOS!借助NavigationSDK,开发者们现在可以更轻松地为用户打造定制化的导航体验,提升用户满意度,增强用户粘性。无论是界面风格、路线规划还是实时交通信息,SDK都能满足你的需求,帮助你打造一款更具竞争力的App。图例1Nav......
  • 数据飞轮:为数据中台注入新活力
    数据中台作为企业信息架构的核心,承载了数据的集成、处理和分析功能,是企业赋能数据驱动决策的重要支柱。然而,数据中台面临着数据孤岛、处理效率和数据质量等问题,这些问题严重阻碍了数据价值的最大化释放。在这样的背景下,数据飞轮的概念显得尤为重要,它不仅能够"唤醒"沉睡的数据,还能激......
  • 谷歌地图 | Navigation SDK 重磅发布!为你的 App 注入导航新体验
    9月17日,Google地图正式发布NavigationSDKforAndroid和iOS!借助NavigationSDK,开发者们现在可以更轻松地为用户打造定制化的导航体验,提升用户满意度,增强用户粘性。无论是界面风格、路线规划还是实时交通信息,SDK都能满足你的需求,帮助你打造一款更具竞争力的App。Navigati......