autofac如何注册静态方法里的接口对象
标题可能是不准确的,因为我不知道如何描述。不知道的原因,是对依赖注入一知半解。
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)
autofac如何注册静态方法里的接口对象的更多相关文章
- 向虚拟机注册钩子,实现Bean对象的初始化和销毁方法
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 有什么方式,能给代码留条活路? 有人说:人人都是产品经理,那你知道吗,人人也都可以是 ...
- EF6CodeFirst+MVC5+Autofac泛型注册 入门实例
贴一个EF6 CodeFirst模式结合MVC5和Autofac(泛型注册)的一个入门实例 网上类似的例子实在太少,最近自己也有用到这一块的知识,总结了一下,不要让后人踩了自己踩过的坑. 1:新建三个 ...
- "静态方法里仅仅能调用静态变量和静态方法"具体解释
静态方法里能够调用静态方法和静态变量,同一时候也能调用非静态方法和非静态变量. public class Test { public Test() {}; public Test(int i) {th ...
- 创建DirectInput接口对象说明---(void **)&m_pDI
读别人代码时遇到的,起初没明白过来这是怎么回事,后来忽然想明白了. if (FAILED(DirectInput8Create(appInstance, DIRECTINPUT_VERSION, II ...
- C# 实例化接口对象
在head first 设计模式中 用到了很多很多接口对象 首先澄清一个问题,就是接口不仅可以声明对象,而且可以把对象实例化,还可以当做参数被传入. 一.接口回调 这就是继承中的向上转型.父类 FL= ...
- Tcp 数据对象传输接口对象设计
输入是一个对象inputObj,接口对象.Send(inputObj),对端接收之后解包成outputObj(与inputObj应相同),触发onPackageReceive事件 事件 public ...
- 在静态方法里调用spring注入的方法
在静态方法里直接调用非静态方法是不行的. 那如何调用spring注入的方法呢? @Component public class AutoLoginUtil { @Autowired p ...
- Statemen接口对象
利用Statement接口实现数据表的更新和查询操作 -取得Statement接口对象:Statement createStatement(int resultSetType, int resultS ...
- 服务端怎样暴露IBinder接口对象
服务端怎样暴露IBinder接口对象: package com.example.mydownload; import android.app.Service; import android.conte ...
随机推荐
- (11) openssl req(生成请求证书、私钥和自建CA)
伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA. 由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明.若已熟悉opens ...
- (2) OpenSSL命令
openssl命令的格式是"openssl command command-options args",command部分有很多种命令,这些命令需要依赖于openssl命令才能执行 ...
- NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)
Description 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题 ...
- STL中set求交集、并集、差集的方法
并集(http://zh.cppreference.com/w/cpp/algorithm/set_union) 交集(http://zh.cppreference.com/w/cpp/algorit ...
- 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)
网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...
- idea 神键
http://blog.csdn.net/dc_726/article/details/42784275 idea 中几个十分酸爽的快捷键.
- 可编辑div的createRange()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 // 在元素的指定位 ...
- bzoj 1787 Meet 紧急集合
Meet 紧急集合 这个题是在脖子oj(清北某奆佬给起的名字)八中oj(大视野在线评测)上的. 给出bzoj链接. 这个题还是求最近公共祖先的问题. 而该题不同于别的题,它是需要求三个点的最近公共祖先 ...
- 【二分+尺取】HDU 6119 小小粉丝度度熊
http://acm.hdu.edu.cn/showproblem.php?pid=6119 [思路] 首先通过处理交叉的可以处理成不交叉的 然后二分查找答案 如何判断一个长度是否可行? 双指针O(n ...
- hdu 2126背包问题
/*有n件物品,旅客一共有m块大洋.第一个问题,旅客最多可以买多少件物品?请注意,这里是多少件,不是价值最大.所以这个非常好求,将所有的物品按照价值排序,先买便宜的,再买贵的.贪心的思想.这个地方有些 ...