菜鸟D曾经的一个项目使用的是Spring.Net框架,是将java的Spring框架移植到.Net平台上来。但是它的核心思想没有发生什么变化,依然是——依赖注入和控制反转。
老规矩,说一下依赖注入和控制反转的通用定义:
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。菜鸟D表示很精炼,但是看不太懂。幸好,上一次大牛给我留了一些代码,本来是给我讲解委托事件的,但是其中的一些东西还是有利于依赖注入的理解的。
简化代码如下:public interface IFrame //定义一个接口 { void Add(); void Edit(); void Save(); } class FX操作1 : IFrame { public void Add() { MessageBox.Show("操作1"); } public void Edit() { } public void Save() { } } class FX操作2 : IFrame { public void Add() { MessageBox.Show("操作2"); } public void Edit() { } public void Save() { } } //自定义控件 public partial class FrameTwo : UserControl { public IFrame BindFrame { get; set; } public FrameTwo() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (BindFrame == null) return; BindFrame.Add(); } private void button2_Click(object sender, EventArgs e) { if (BindFrame == null) return; BindFrame.Edit(); } private void button3_Click(object sender, EventArgs e) { if (BindFrame == null) return; BindFrame.Save(); } } //主界面: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void radioButton1_Click(object sender, EventArgs e) { if (radioButton1.Checked) { this.frameTwo1.BindFrame = new FX操作1(); } else { this.frameTwo1.BindFrame = new FX操作2(); } } }
菜鸟D的看法是,编程中没有设计模式,所谓的设计模式只在做一件事——解耦。我们解开了实体类和操作类的耦合,但是却将操作类和工厂耦合在一起,想要解开操作类和工厂的耦合,又有可能会造成新的耦合,我们在不同的场景采用不同的解耦手段,这些手段被总结起来就叫做设计模式。
菜鸟D希望这篇白话对您有所帮助。
以下部分可能会对您有所帮助:
这篇文章的人和斧头的例子,感觉还是很不错的,对于依赖注入和控制反转的核心思想的理解还是挺有帮助的,代码是java的,学C#的也不难看懂。这篇文章比较深,但是不难理解,而且是层次递进,读起来也很容易。