[DI]模式中binding
是什么意思?
我正在通过IoC
来学习here教程。我遇到了以下摘录:
依赖注入(DI)是用于实现IoC的设计模式。它允许在类外部创建依赖对象,并通过不同方式将这些对象提供给类。 使用DI,我们将依赖对象的创建和绑定移到依赖它们的类之外。
我不明白这里指的是什么绑定?
我想这里提到的绑定是关于设置客户端类字段的。但是在这种情况下,我们不会与DI绑定。因为,有三种使用DI的方法:构造函数,属性(设置器)和方法。而且所有这些方法都不会将绑定(客户端类字段的分配)移出类之外,所有这些方式都发生在客户端类的范围内。所以,我在这里感到困惑。
UPDATE在为问题提供了一些答案之后,我得出一个结论,关于binding是什么有两种可能的定义。
1绑定意味着将在依赖类内部使用的接口映射到实际的对象类型。
2绑定意味着将实际类型作为接口参数的参数传递给依赖类。
什么是正确的定义1或2?还是binding的定义取决于提到binding的上下文?
绑定是什么意思?
这意味着我们的依赖项类将由IoC容器自动解析。
我们有IRepository interface
和Repository class
。
如果我们将这两个绑定在一起。每次我们请求IRepository
时,我们的容器都会自动为我们提供Repository
类。
这使得更改Repository类的实现非常容易。由于我们不是立即依赖于它。我们从不说new Repository类。我们仅提供接口,其他所有内容均由容器处理。例如,您可以说IRepository绑定到DatabaseRepository类。仅使用更改容器绑定,仅执行其他操作。
这都是由于IoC容器中的绑定而发生的。这为您的应用程序提供了很大的灵活性。
而且我们在容器中使用绑定命令可以为我们的对象提供生存期,通常这三个对象(Singleton,PerInstance,Scoped)。
可以使该类不知道注入到其中的实际类。
它可以依赖于接口而不是类,可以将要实例化哪个类的逻辑以“实现”每个接口的逻辑委托给类本身(或配置)外部的代码。
因此,可以说将类插入期望接口的操作就像“绑定”。
您可以这样编写代码而无需依赖注入:
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
时,我们的IoC容器将解析DuracellBattery
的实例并将其注入。这是Ninject Bind
方法的示例:
Bind<IBattery>().To<DuracellBattery>()