1

Ninject(最新版本)可以将接口绑定到特定类中的类型吗?我的意思是...假设我有两个课程..

ClassA 和 ClassB,在构造函数中都有 IContext 注入。可以说将 IContext 绑定到 ClassA 的 ContextA 和将 IContext 绑定到 ContextB 到 ClassB 吗?

4

2 回答 2

3

除了使用命名绑定,您还可以使用条件绑定,它需要更少的代码并且更安全:

Bind<IContext>().To<ContextA>().WhenInjectedInto<SomeClassThatNeedsAContext>();
Bind<IContext>().To<ContextB>().WhenInjectedInto<SomeOtherClassThatNeedsBContext>();
于 2012-10-19T04:26:48.110 回答
1

一种方法是使用命名绑定。

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 等混淆。

我从经验中发现的一件事是,如果我发现自己经常这样做,那么我的界面或类设计中的某个地方就会出现缺陷。也许你真的需要两个不同的接口?

于 2012-10-19T00:49:20.897 回答