使用"依赖注入"是什么意思?展示的任何AS3代码示例?

Vis*_*ani 2 flash actionscript-3

我经常在我正在阅读的AS3书中得到"依赖注入"一词.但是,它还没有解释它究竟是什么.任何人都可以使用一些AS3.0代码展示它究竟是什么?

谢谢Vishwas

div*_*ges 8

依赖注入只是意味着不是一个类决定它需要什么对象才能工作,而是从外部传递那些对象.

在正常开发中,我们的对象具体地决定了它们的类,如下所示:

public class MyClass
{
    private var m_someObj:SomeObj = null;

    public function MyClass()
    {
        this.m_someObj = new SomeObj;
    }
}
Run Code Online (Sandbox Code Playgroud)

转移到依赖注入,MyClass现在从外部获取其依赖项:

public class MyClass
{
    private var m_someObj:SomeObj = null;

    public function MyClass( obj:SomeObj ):void
    {
        this.m_someObj = obj;
    }
}

var myClass:MyClass = new MyClass( new SomeObj );
Run Code Online (Sandbox Code Playgroud)

在那个例子中,我们在SomeObj构造时传入类MyClass.您也可以使用公共变量/属性.通过构造函数传递对象有利于重要的依赖关系.

现在为了使它真正有用,我们可以使用接口而不是具体的类.这让我们可以MyClass轻松改变行为:

public interface ISomeObj
{
}

public class SomeObjImplA implements ISomeObj
{
}

public class SomeObjImplB implements ISomeObj
{
}

public class MyClass
{
    private var m_someObj:ISomeObj = null;

    public function MyClass( obj:ISomeObj ):void
    {
        this.m_someObj = obj;
    }
}

var myClass1:MyClass = new MyClass( new SomeObjImplA );
var myClass2:MyClass = new MyClass( new SomeObjImplB );
Run Code Online (Sandbox Code Playgroud)

举个例子,ISomeObj界面可能会描述一个渲染器.该SomeObjImplA课程将呈现使用正常的addChild()技巧,而SomeObjImplB类将呈现使用位图传输.现在,您可以MyClass通过更改参数来更改渲染对象的方式 - MyClass类不需要知道它是正常渲染还是通过blitting.

决定传递给哪个类的对象MyClass是所谓的注入器.它如何决定注入哪个类是你获得灵活性的地方.例如,您可以加载包含要注入的类的XML对象,或者使用反射,这就是Robotlegs的工作方式.

32bitkid发布的链接是对原理的一个很好的解释,但这是它的要点.您还可以查看维基页面.有关奖励积分,请阅读有关控制反转的内容.