gpt4 book ai didi

c# - Ninject 重新绑定(bind)一个方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:17 25 4
gpt4 key购买 nike

我想使用 Ninject 将一种方法重新绑定(bind)到另一种实现,这可能吗?

我会详细说明,我有这个接口(interface)有两个不同的实现:

public interface IPersonFacade
{
List<string> GetPeople();
string GetName();
}

public class PersonFacade:IPersonFacade
{
//Implement Interface fetching data from a db.
}

public class PersonFacadeStub:IPersonFacade
{
//Implement Interface with some static data
}

我正在使用 Ninject mvc 扩展并有我的 NinjectModule 实现:

public class ServiceModule:NinjectModule
{
public override void Load()
{
Bind<IPersonFacade>().To<PersonFacade>();
}
}

那么回到我的问题,是否可以重新绑定(bind)方法 GetPeople() 以便它使用来自 PersonFacadeStub 的实现,但 IPersonFacade 继续使用来自 PersonFacade 的 GetName?

最佳答案

我认为这是不可能的。 NInject 与任何其他 DI 容器一样管理类型,而不是方法。如果要对同一接口(interface)模式的不同方法使用不同的类型 Composite 可能有帮助:

public class CompositePersonFacade : IPersonFacade
{
private readonly IPersonFacade realFacade;
private readonly IPersonFacade stubFacade;

public CompositePersonFacade(IPersonFacade realFacade, IPersonFacade stubFacade)
{
this.realFacade = realFacade;
this.stubFacade = stubFacade;
}

public List<string> GetPeople()
{
return stubFacade.GetPeople();
}

public string GetName()
{
return realFacade.GetName();
}
}

同时修改绑定(bind):

Bind<IPersonFacade>().To<CompositePersonFacade>()
.WithConstructorArgument("realFacade",
context => context.Kernel.Get<PersonFacade>())
.WithConstructorArgument("stubFacade",
context => context.Kernel.Get<PersonFacadeStub>());

关于c# - Ninject 重新绑定(bind)一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10012637/

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