autofac如何注册静态方法里的接口对象
2016-03-14 19:44
344 查看
标题可能是不准确的,因为我不知道如何描述。不知道的原因,是对依赖注入一知半解。
Autofac可以自动注册对象实例到接口,人所尽知。而在asp.net mvc中,这个实例化的工作,通常在每个控制器的构造函数里完成。
假如,我有些静态方法里,非要用到这些接口呢?怎么实例化它们?例如:
你当然可以将这个对象作为参数传递进来,如
问题是,有时候并不方便将这个实例化对象传进来,原因可能是这个静态方法很多地方都在使用,要传这个实例对象,需要改好多地方;并且每个调用方,都要在自己的构造函数里加入这个接口作为参数(不然咋注册?)
最好的办法就是在这个静态方法里注册或获得实例对象
但如何获取这个实例对象呢?new一个的话,autofac的优势就荡然无存了。之所以使用autofac,使用IOC容器,就是为了面向接口编程。如果从设计阶段就写死对象的实例化类型,就不叫面向接口编程了。
那么,如何实例化?
可以酱紫:
前提条件,是该实例化对象类型要在项目的初始化阶段注册,比如在ASP.NET MVC项目里的app_start事件里注册:
参考文章:
[Autofac怎么依赖注入ASP.NET MVC5类的静态方法]
(http://www.lanhusoft.com/Article/366.html)
Autofac可以自动注册对象实例到接口,人所尽知。而在asp.net mvc中,这个实例化的工作,通常在每个控制器的构造函数里完成。
假如,我有些静态方法里,非要用到这些接口呢?怎么实例化它们?例如:
public static bool SetData() { //这里需要用到实例化的某个对象,例如ILog }
你当然可以将这个对象作为参数传递进来,如
public static bool SetData(Ilog log)
问题是,有时候并不方便将这个实例化对象传进来,原因可能是这个静态方法很多地方都在使用,要传这个实例对象,需要改好多地方;并且每个调用方,都要在自己的构造函数里加入这个接口作为参数(不然咋注册?)
最好的办法就是在这个静态方法里注册或获得实例对象
public static bool SetData() { //在这里获得实例化对象,如 ILog log = .... }
但如何获取这个实例对象呢?new一个的话,autofac的优势就荡然无存了。之所以使用autofac,使用IOC容器,就是为了面向接口编程。如果从设计阶段就写死对象的实例化类型,就不叫面向接口编程了。
那么,如何实例化?
可以酱紫:
public static bool SetData() { //DependencyResolver是System.MVC里的对象 //下面这个表达式大意是,获得现行注册的对象类型,来实例化接口对象 //换言之,这是autofac的手动实例化方式 ILog log = DependencyResolver.Current.GetService<ILog>(); }
前提条件,是该实例化对象类型要在项目的初始化阶段注册,比如在ASP.NET MVC项目里的app_start事件里注册:
builder.RegisterType<MyLog>().As<ILog>().InstancePerLifetimeScope();
参考文章:
[Autofac怎么依赖注入ASP.NET MVC5类的静态方法]
(http://www.lanhusoft.com/Article/366.html)
相关文章推荐
- 【MVC框架系列】(一)——Struts,让我把你看得明明白白
- Java.作业2 myClass
- Xposed获取微信用户名密码
- iOS-绘图系统相关学习笔记(一)
- ffmpeg用法及如何使用fluent-ffmpeg
- B树与B+树
- 剑指offer——替换空格 C++
- 我理解的希尔排序
- note during using the redhat
- RethinnkDB, Flask, Backbone.js
- LightOJ 1370 Bi-shoe and Phi-shoe(素数筛)
- 游戏服务器开发和维护的一些经验
- 作业二:编写一个自动生成四则运算的程序
- python的reduce函数
- nyoj 过河问题 贪心
- 开始自己的博客
- JavaScript方法中的DOM对象
- 由常量池 运行时常量池 String intern方法想到的(一)
- opencv 图像去噪要点总结
- 如何挑选适合的前端框架?