社区
C#
帖子详情
Dependency Injection是什么东东?哪位能举个通俗易懂的小例子吗?
nanhe0065
2010-06-25 02:43:09
为什么要用到它?
什么情况下是非要用到它不可?
...全文
770
11
打赏
收藏
Dependency Injection是什么东东?哪位能举个通俗易懂的小例子吗?
为什么要用到它? 什么情况下是非要用到它不可?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dazhabai
2010-06-28
打赏
举报
回复
http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html
楼主可以看看这个
dazhabai
2010-06-28
打赏
举报
回复
依赖注入的就是(我的看法)你写一个方法,但是参数是接口,别人调你的这个方法的时候,需要先实例化一个对象,改对象实现了这个接口,然后将这个对象作为参数传进去。
企-鹅
2010-06-27
打赏
举报
回复
我不懂C#,不过我想学,哥,以后遇到不懂的我问你啊...
想弄个CSDN回帖机器人,以前用的机器人不好用,马甲因此都被封杀了..
我要优化一下机器人..继续壮大马甲队伍....
企-鹅
2010-06-27
打赏
举报
回复
哥,5楼也是我....
nanhe0065
2010-06-27
打赏
举报
回复
[Quote=引用 6 楼 zhangheng0624 的回复:]
在博客园搜了一下,其实我不懂,我是来帮我哥顶帖的...
[/Quote]
谢谢企鹅,Martin Fowler很出名啊。最近看WPF的MVVM模式,里边提到的Presentation Model好像就是Martin Foweler 2004年提出来的。谢谢你5楼发的那个链接。
企-鹅
2010-06-27
打赏
举报
回复
在博客园搜了一下,其实我不懂,我是来帮我哥顶帖的...
企-鹅
2010-06-27
打赏
举报
回复
Dependency Injection
企-鹅
2010-06-27
打赏
举报
回复
Inversion of Control,即反转模式,这里有著名的好莱坞理论:你呆着别动,到时我会找你。后被
Martin Fowler改名为 Dependency Injection 依赖注射,也就是将类之间的关系通过第三方进行注射,不需要类自己去解决调用关系。
AInterface a = new AInterfaceImp();
AInterfaceImp是接口AInterface的一个子类,Ioc模式可以延缓接口的实现,根据需要实现,有个比喻:接口如同空的模型套,在必要时,需要向模型套注射石膏,这样才能成为一个模型实体,因此,我们将人为控制接口的实现成为“注射”。
其实Ioc模式也是解决调用者和被调用者之间的一种关系,上述AInterface实现语句表明当前是在调用被调用者AInterfaceImp,由于被调用者名称写入了调用者的代码中,这产生了一个接口实现的原罪:彼此联系,调用者和被调用者有紧密联系,在UML中是用依赖 Dependency 表示。
但是这种依赖在分离关注的思维下是不可忍耐的,必须切割,实现调用者和被调用者解耦,新的Ioc模式 Dependency Injection 模式由此产生了, Dependency Injection模式是依赖注射的意思,也就是将依赖先剥离,然后在适当时候再注射进入。
在通常传统情况下,为了实现调用者和被调用者解耦,分离,一般是通过工厂模式实现的,下面将通过比较工厂模式和Ioc模式不同,加深理解Ioc模式。
-----------------------
例如,我们在代码中定义一个变量。
ObjX x = new ObjX();
x.DoSomething();
这里,我们获得了一个x的地址,而这个地址直接指向ObjX的实例。而当前代码的上下文就直接依赖于ObjX。而这种依赖的实际意义就是将DoSomething的逻辑定义和DoSomething的逻辑实现绑定在一起。
当有一天,我们需要将DoSomething的逻辑定义用另外一种逻辑实现来实现时,接口就被引入。
IObjX x = new ObjX1();
x.DoSomething();
这里,我们同样获得了一个x的地址,而这个地址指向ObjX1的实例。虽然代码的上下文还是直接依赖于XObj1()。而这种依赖和上面的依赖相比有了不同,它是通过接口来实现的依赖。DoSomething的逻辑定义可以通过接口绑定到各种逻辑实现上。
人类总是有更多的需求,而这种需求往往会促使新事物的诞生。
有人就索性只在上下文的代码中只定义接口,即只有IObjX,而关于IObjX的实现,则完全不管,并将其编译为二进制组件发布。而关于IObjX的实现,则通过依赖注入的方式,在该组件被使用时,动态加载。这里,我个人觉得对IObjX的使用,就是为了获得一个逻辑层面的地址,然后再运行时,再将该逻辑地址映射到一个实际的实例地址上。
xy325432
2010-06-25
打赏
举报
回复
[Quote=引用 2 楼 lianshaohua 的回复:]
依赖注入:就是你公布一个接口,然后外部实现你的接口,并把类的实例通过接口让你的程序调用,基本就是这个意思了;
[/Quote]
感觉也是这个意思
ztenv
2010-06-25
打赏
举报
回复
依赖注入:就是你公布一个接口,然后外部实现你的接口,并把类的实例通过接口让你的程序调用,基本就是这个意思了;
倒霉熊
2010-06-25
打赏
举报
回复
@Autowired注解你真的会用吗?Spring官方有话说:Always use constructor based
dependency
inject
ion
in your beans
目录问题背景@Autowired和构造方法执行顺序差异解决方案为什么要加final? 问题背景 使用@Autowired注解时,发现IDEA报了一个 warning! 追求极致的程序员怎么受得了这玩意? 还得再点击那三小点点!然后继续点! Spring Team recommends “Always use constructor based
dependency
inject
ion
...
Method annotated with @Bean is called directly. Use
dependency
inject
ion
instead.
Method annotated with @Bean is called directly. Use
dependency
inject
ion
instead. 自定义SecurityConfig类继承了WebSecurityConfigurerAdapter,为config配置类但是未添加@Configurat
ion
注解,导致@Bean之间相互调用出错,添加@Configurat
ion
注解即可解决 ...
Method annotated with @Bean is called directly. Use
dependency
inject
ion
instead
Method annotated with @Bean is called directly. Use
dependency
inject
ion
instead
Security02: Method annotated with @Bean is called directly. Use
dependency
inject
ion
instead.
未添加@Configurat
ion
注解,导致@Bean之间相互调用出错
dependencies和
dependency
以及
dependency
Management三者的区别?
首先,这三个maven的pom文件标签都是用来进行包管理的 势力范围由
dependency
Management>dependencies>
dependency
依次减弱,并且每个标签都是上一个标签的下级。
dependency
Management:管理依赖版本号 通常会在一个组织或者项目的最顶层的父pom中看到
dependency
Management 使用pom.xml中的
dependency
Management元素能让所有在子项目中引用一个依赖而不用显示的列出版本号。 maven会沿着父子层次向
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章