将接口绑定到另一个绑定结果的最佳方式
本文关键字:绑定 最佳 结果 方式 另一个 接口 | 更新日期: 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());