C# 重新绑定方法

C# 重新绑定方法,c#,asp.net-mvc,ninject,C#,Asp.net Mvc,Ninject,我想使用Ninject将一个方法重新绑定到另一个实现,这可能吗 我将详细说明,我有两个不同实现的接口: 公共接口IPersonFacade { 列出GetPeople(); 字符串GetName(); } 公共类PersonFacade:IPersonFacade { //实现从数据库获取数据的接口。 } 公共类PersonFacadeSub:IPersonFacade { //实现与一些静态数据的接口 } 我正在使用Ninject mvc扩展,并有我的Ninject模块实现: 公共类服务模块

我想使用Ninject将一个方法重新绑定到另一个实现,这可能吗

我将详细说明,我有两个不同实现的接口:

公共接口IPersonFacade
{
列出GetPeople();
字符串GetName();
}
公共类PersonFacade:IPersonFacade
{
//实现从数据库获取数据的接口。
}
公共类PersonFacadeSub:IPersonFacade
{
//实现与一些静态数据的接口
}
我正在使用Ninject mvc扩展,并有我的Ninject模块实现:

公共类服务模块:Ninject模块
{   
公共覆盖无效负载()
{
绑定()到();
}
}

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

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

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();
    }
}
公共类CompositePersonFacade:IPersonFacade
{
私有只读IPersonFacade realFacade;
私有只读IPersonFacade;
公共CompositePersonFacade(IPersonFacade realFacade、IPersonFacade stubFacade)
{
this.realafacade=realafacade;
this.stubFacade=stubFacade;
}
公共列表GetPeople()
{
返回stubFacade.GetPeople();
}
公共字符串GetName()
{
返回realFacade.GetName();
}
}
并修改绑定:

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

+1不错@Nizolai查看Ninject.Extensions.Interception是否有任何用途(取决于您是否真正想要您想要的…)