将接口绑定到另一个绑定结果的最佳方式

本文关键字:绑定 最佳 结果 方式 另一个 接口 | 更新日期: 2023-09-27 18:29:01

假设我有以下接口和类:

public interface IMyService
{
    void DoSomething();
}
public class MagicInterfaceImplementor<T>
{
    public T GetImplementation()
    {
        // Not relevant.
    }
}

获取IMyService实例的唯一方法是通过MagicInterfaceImplementor<IMyService>。很明显,我可以很容易地为MagicInterfaceImplementor<IMyService>:设置注入

Bind<MagicInterfaceImplementor<IMyService>().ToSelf();

[严格地说,在这个特定的例子中,这不是必要的,但在实际情况下,我会在绑定方面做更多的工作。]

我的问题是-如何绑定IMyService

我想我可以做到这一点,但我不确定这是否是最好的方法,因为我明确地调用内核,这通常是不受欢迎的:

Bind<IMyService>().ToMethod(context => {
    return ((MagicInterfaceImplementor<IMyService>)
            context.Kernel.GetService(typeof(MagicInterfaceImplementor<IMyService>)))
                .GetImplementation();
});

如有任何更恰当的方法建议,我们将不胜感激。

将接口绑定到另一个绑定结果的最佳方式

也许MagicImplementor到底做了什么会很有趣。所以这更多的是一种猜测,但也许提供者可能会帮助你。

https://github.com/ninject/ninject/wiki/Providers,-工厂方法和激活上下文

否则你可以简单地写

Bind<IMyService>().ToMethod(ctx => ctx.Kernel.Get<MagicInterfaceImplementor<IMyService>>().GetImplementation());