unity-container - 如何使用统一根据注入(inject)的类型有条件地绑定(bind)实例?

标签 unity-container ioc-container ninject

我习惯了 Ninject,对于一个特定的项目,我被要求学习 Unity。

有一件事我找不到有关如何做的信息。

在 Ninject 我可以说:

Bind<IWarrior>().To<Samurai>().Named("Samurai");
Bind<IWarrior>().To<Ninja>().Named("Ninja");
Bind<IWeapon>().To<Katana>().WhenInjectedInto(typeof(Samurai));
Bind<IWeapon>().To<Shuriken>().WhenInjectedInto(typeof(Ninja));

然后,当有人问起名叫武士的武士时,武士带着假名,忍者带着手里剑。正如它应该。

我不想在战士中引用容器来获得合适的武器,也不想用属性污染模型(在另一个没有引用 ninject 或 unity 的程序集中)

PD:我正在寻找一种代码方式,而不是通过 xml 配置。

最佳答案

这应该适用于 Unity:

Container
 .Register<IWeapon, Katana>("Katana")
 .Register<IWeapon, Shuriken>("Shuriken")
 .Register<IWarrior, Samurai>("Samurai", new InjectionConstructor(new ResolvedParameter<IWeapon>("Katana"))
 .Register<IWarrior, Ninja>("Ninja", new InjectionConstructor(new ResolvedParameter<IWeapon>("Shuriken")));

测试 :
var samurai = Container.Resolve<IWarrior>("Samurai");
Assert.IsTrue(samurai is Samurai);
Assert.IsTrue(samurai.Weapon is Katana);

var ninja = Container.Resolve<IWarrior>("Ninja");
Assert.IsTrue(ninja is Ninja);
Assert.IsTrue(ninja.Weapon is Shuriken);

关于unity-container - 如何使用统一根据注入(inject)的类型有条件地绑定(bind)实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5004306/

相关文章:

asp.net-mvc-3 - 使用 Unity 容器时,没有为此对象定义无参数构造函数异常

asp.net-mvc - 无法获得有效的 Unity session 生命周期管理器,ASP.NET MVC5

.net - 解决所有不使用名称

dependency-injection - 创建具有依赖关系的对象 - 依赖注入(inject)

java - 一个关于Spring IoC的简单问题

c# - ASP.NET Identity 2 Invalidate Identity难点

silverlight - ninject-contrib 支持 Silverlight 吗?

c# - 类设计、多态加载方式、依赖注入(inject)

c# - 简单注入(inject)器 - 寄存器集合

asp.net-mvc - 依赖注入(inject)能走多远?