Phi*_*hil 12 dependency-injection ninject ioc-container
我最近一直在尝试学习IoC,并根据以下代码提出几个问题:
public class WarriorModule : NinjectModule
{
public override void Load()
{
Bind<IWeapon>().To<Sword>();
Bind<Samurai>().ToSelf();
}
}
Run Code Online (Sandbox Code Playgroud)
我在掌握接口的新概念时遇到了麻烦.在我创建一个接口之前,例如IRunnable
,实现该功能void Run()
.在IoC中,我现在将界面视为仅映射到单个具体类的东西.假设,我如何将多个具体类映射到接口? 我一直在阅读你可以将多个接口映射到一个具体的类,但不是相反(除非这是上下文映射发挥作用的地方).
假设接口只映射到单个对象,何时应该创建接口而不是让对象绑定到自身? 无论哪种方式,当映射更改正确时,您将不得不更改同一段代码?
编辑:我标记了我做的答案,因为它帮助了我个人.这两条评论同样具有丰富的信息.
Rem*_*oor 18
一个好的IoC容器不应该改变接口的使用方式:
Ninject允许使用两种不同的概念:
条件绑定:如果多个类实现相同的接口,则必须指定在哪种情况下使用哪个实现.这是使用条件完成的:
Bind<IWeapon>().To<Sword>().When(ctx => TodayIsSunday());
Bind<IWeapon>().To<Dagger>().When(ctx => !TodayIsSunday());
多个接口:请参阅我的博文http://www.planetgeek.ch/2010/12/08/ninject-extension-contextpreservation-explained/
Mar*_*ann 16
我最近从更一般的角度讨论了这个话题.最重要的是,松散耦合的代码倾向于产生过多的1:1接口.这与重用抽象原则相反.
但是,这更像是一个应用程序设计问题,而不是特定DI容器的问题.虽然我不知道Ninject,但我曾经使用过的所有其他容器(Castle Windsor,StructureMap,Spring.NET,Autofac,Unity,甚至MEF)都可以将多个实现映射到同一个界面.他们如何做到这一点略有不同,但我在本书的第四部分中涵盖了所有这些- 不幸的是,书中没有涵盖Ninject.
归档时间: |
|
查看次数: |
1600 次 |
最近记录: |