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

时间:2013-08-23 22:03:20

标签: c# ninject

假设我有以下界面和类:

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();
});

任何有关更合适的方法的建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

MagicImplementor究竟是做什么的,这可能会很有趣。所以这更像是一个猜测,但也许供应商可能会帮助你。

https://github.com/ninject/ninject/wiki/Providers,-Factory-Methods-and-the-Activation-Context

否则你可以简单地写

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