gpt4 book ai didi

c# - Ninject 2.0 - 绑定(bind)到不止一次使用同一接口(interface)的对象?

转载 作者:太空狗 更新时间:2023-10-29 21:00:09 25 4
gpt4 key购买 nike

考虑以下几点:

    public Something(IInterface concreteObjectOne, IInterface concreteObjectTwo) 
{
this.concreteObjectOne = concreteObjectOne;
this.concreteObjectTwo = concreteObjectTwo;
}

如何使用 Ninject 设置这种类型的绑定(bind)?我会尝试使用谷歌搜索这个术语,但由于我不确定这叫什么,所以我不能,也无法在 Wiki 上找到任何关于此的内容。

编辑:

我相信这称为基于约定的绑定(bind),如所述 here .但是,此文档适用于 1.0 版,2.0 版没有 Only 方法。我希望在没有属性的情况下实现这一点 - 使用名称约定或类似的东西。

最佳答案

除了使用“Only”方法外,文章还提出了另一种解决方案,即为注入(inject)的对象指定不同的属性。

示例:

public class ObjectOneAttribute : Attribute
{

}
public class ObjectTwoAttribute : Attribute
{

}

然后

public Something([ObjectOneAttribute] IInterface concreteObjectOne, [ObjectTwoAttribute] IInterface concreteObjectTwo) 
{
this.concreteObjectOne = concreteObjectOne;
this.concreteObjectTwo = concreteObjectTwo;
}

当你想将接口(interface)绑定(bind)到正确的具体对象时,使用“WhereTargetHas”方法:

Bind<IInterface>().To<YourConcreteTypeOne>().WhereTargetHas<ObjectOneAttribute>();
Bind<IInterface>().To<YourConcreteTypeTwo>().WhereTargetHas<ObjectTwoAttribute>();

更新:不使用属性的解决方案:
使用方法“When”:

Bind<IInterface>().To<YourConcreteTypeOne>().When(r => r.Target.Name == "concreteObjectOne");  
Bind<IInterface>().To<YourConcreteTypeTwo>().When(r => r.Target.Name == "concreteObjectTwo")

;

关于c# - Ninject 2.0 - 绑定(bind)到不止一次使用同一接口(interface)的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2396285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com