0

假设我有以下接口和类:

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

任何有关更合适的方法的建议将不胜感激。

4

1 回答 1

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());
于 2013-08-28T14:23:51.487 回答