Ninject(最新版本)可以将接口绑定到特定类中的类型吗?我的意思是...假设我有两个课程..
ClassA 和 ClassB,在构造函数中都有 IContext 注入。可以说将 IContext 绑定到 ClassA 的 ContextA 和将 IContext 绑定到 ContextB 到 ClassB 吗?
除了使用命名绑定,您还可以使用条件绑定,它需要更少的代码并且更安全:
Bind<IContext>().To<ContextA>().WhenInjectedInto<SomeClassThatNeedsAContext>();
Bind<IContext>().To<ContextB>().WhenInjectedInto<SomeOtherClassThatNeedsBContext>();
一种方法是使用命名绑定。
kernel.Bind<IContext>().To<ContextA>().Named("A");
kernel.Bind<IContext>().To<ContextB>().Named("B");
kernel.Bind<SomeClassThatNeedsContext>().ToSelf().WithConstructorArgument("context",ninjectContext=>ninjectContext.Get<IContext>("A"));
kernel.Bind<SomeOtherClassThatNeedsContext>().ToSelf().WithConstructorArgument("context",ninjectContext=>ninjectContext.Get<IContext>("B"));
另一种方法可能是单独使用“WithConstructorArgument”
kernel.Bind<SomeClassThatNeedsAContext>().ToSelf().WithConstructorArgument("context",ninjectContext=>ninjectContext.Get<ContextA>());
为了避免混淆,Ninject 也有上下文的概念,不要将它与您提供的示例 IContext 等混淆。
我从经验中发现的一件事是,如果我发现自己经常这样做,那么我的界面或类设计中的某个地方就会出现缺陷。也许你真的需要两个不同的接口?