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

标签 c# asp.net-mvc ninject

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

相关文章:

asp.net-mvc - 缓存无法在客户端上进行 JSON 响应

asp.net-web-api - 成员(member)重新启动用 Simple Injector 替换 Ninject

c# - 如何在 Neo4j v2 中使用 Neo4jClient 创建节点?

c# - ASP.NET Web Api 依赖注入(inject)——单例与否

javascript - 特殊字符转html代码C#

asp.net - Quartz.net 和 Ninject : how to bind implementation to my job using NInject

asp.net - Ninject、ASP.NET 和自定义控件

c# - 我怎样才能找出一个类创建了多少个对象

c# - 对字节数组中的每个元素求和

c# - 无法在 RedirectToAction 上传递多个参数