九拒绝重新绑定方法
本文关键字:绑定 方法 拒绝 新绑定 | 更新日期: 2023-09-27 18:30:03
使用Ninject,我想将一个方法重新绑定到另一个实现,这可能吗?
我将详细说明,我有两个不同的实现接口:
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
}
我正在使用Ninjectmvc扩展,并有我的NinjectModule实现:
public class ServiceModule:NinjectModule
{
public override void Load()
{
Bind<IPersonFacade>().To<PersonFacade>();
}
}
回到我的问题,是否可以重新绑定方法GetPeople(),使其使用PersonFacadeStub中的实现,但IPersonFacade一直使用PersonFacade中的GetName?
我认为这是不可能的。NInject和其他DI容器一样管理类型,而不是方法。如果您想对相同接口模式的不同方法使用不同的类型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<IPersonFacade>().To<CompositePersonFacade>()
.WithConstructorArgument("realFacade",
context => context.Kernel.Get<PersonFacade>())
.WithConstructorArgument("stubFacade",
context => context.Kernel.Get<PersonFacadeStub>());