Ninject(最新版本)可能将接口绑定到特定类中的类型?通过我的意思是...让我说我有两个类..可能将接口绑定到特定类中的类型?
ClassA和ClassB,都在构造函数IContext注入..有可能说的绑定类型IContext到ContextA的ClassA和IContext到ContextB到ClassB ?
Ninject(最新版本)可能将接口绑定到特定类中的类型?通过我的意思是...让我说我有两个类..可能将接口绑定到特定类中的类型?
ClassA和ClassB,都在构造函数IContext注入..有可能说的绑定类型IContext到ContextA的ClassA和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等
我从经验中发现的一件事情是,如果我发现自己做这件事,我的界面或类设计中就有一个缺陷。也许你真的需要两个不同的界面?
罗.. IContext在我的情况表示上下文来访问特定的数据库。它只是我在我的项目中为特定的类使用另一个数据库,所以我必须将其他上下文注入到它的存储库中。这就是为什么我不能有2接口加上它没有意义,我有2个接口。基础知识库正在使用IContext。这个想法是能够将一个上下文传递给包含连接字符串的主存储库(从配置文件中获取)。这使我能够为一个项目提供多个数据库。 – Rushino
最简单! +1这是我认为的更好的答案。需要更少的代码。 – Rushino
这很酷,我以前没见过这个语法,非常有用。 – Brook
@布鲁克不用担心你的回答很好。 :)其实有3个原因,我选择了这个答案。 1-更直观。我个人尝试避免魔术串。 3较少的代码。 – Rushino