使用 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/