假设我有以下界面和类:
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();
});
任何有关更合适的方法的建议都将受到赞赏。
答案 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());