“绑定”在DI模式的上下文中是什么意思?

问题描述 投票:0回答:3

[DI]模式中binding是什么意思?

我正在通过IoC来学习here教程。我遇到了以下摘录:

依赖注入(DI)是用于实现IoC的设计模式。它允许在类外部创建依赖对象,并通过不同方式将这些对象提供给类。 使用DI,我们将依赖对象的创建和绑定移到依赖它们的类之外。

我不明白这里指的是什么绑定?

我想这里提到的绑定是关于设置客户端类字段的。但是在这种情况下,我们不会与DI绑定。因为,有三种使用DI的方法:构造函数,属性(设置器)和方法。而且所有这些方法都不会将绑定(客户端类字段的分配)移出类之外,所有这些方式都发生在客户端类的范围内。所以,我在这里感到困惑。

UPDATE在为问题提供了一些答案之后,我得出一个结论,关于binding是什么有两种可能的定义。

1绑定意味着将在依赖类内部使用的接口映射到实际的对象类型。

2绑定意味着将实际类型作为接口参数的参数传递给依赖类。

什么是正确的定义12?还是binding的定义取决于提到binding的上下文?

c# design-patterns dependency-injection binding inversion-of-control
3个回答
3
投票

绑定是什么意思?

这意味着我们的依赖项类将由IoC容器自动解析。

例如:

我们有IRepository interfaceRepository class

如果我们将这两个绑定在一起。每次我们请求IRepository时,我们的容器都会自动为我们提供Repository类。

这使得更改Repository类的实现非常容易。由于我们不是立即依赖于它。我们从不说new Repository类。我们仅提供接口,其他所有内容均由容器处理。例如,您可以说IRepository绑定到DatabaseRepository类。仅使用更改容器绑定,仅执行其他操作。

这都是由于IoC容器中的绑定而发生的。这为您的应用程序提供了很大的灵活性。

而且我们在容器中使用绑定命令可以为我们的对象提供生存期,通常这三个对象(Singleton,PerInstance,Scoped)。


2
投票

可以使该类不知道注入到其中的实际类。

它可以依赖于接口而不是类,可以将要实例化哪个类的逻辑以“实现”每个接口的逻辑委托给类本身(或配置)外部的代码。

因此,可以说将类插入期望接口的操作就像“绑定”。


1
投票

您可以这样编写代码而无需依赖注入:

class NoDiRadio
{
    public EnergizerBattery Battery { get; set; }

    public NoDiRadio()
    {
        Battery = new EnergizerBattery(); // creation and binding inside of NoDiRadio
    }
}

class EnergizerBattery
{
    public void Start()
    {
    }        
}

但是,您可以像这样编写更松耦合的代码和更可测试的代码:

class DiRadio
{
    public IBattery Battery { get; set; }

    public DiRadio(IBattery battery)
    {
        Battery = battery;
    }
}

interface IBattery
{
    void Start();
}

class EnergizerBattery : IBattery
{
    public void Start()
    {
    }        
}

然后我们将依赖对象的创建和绑定移到依赖它们的类之外

IBattery battery = new DuracellBattery(); // creation and **binding** to IBattery here
var diRadio = new DiRadio(battery);

UPDATE:

在IoC容器中进行绑定意味着,当我们看到IBattery时,我们的Io​​C容器将解析DuracellBattery的实例并将其注入。这是Ninject Bind方法的示例:

Bind<IBattery>().To<DuracellBattery>()
© www.soinside.com 2019 - 2024. All rights reserved.