.Net世界中是否有任何DI框架很简单,并且不需要太多的元数据配置。使用xml等?
来自Java世界的一个很好的例子是JBoss Weld。使用Weld,可以使用返回对象的生成器方法(可以使用自定义注释标记的方法)。上面生产的物体可以在需要时注入。这节省了大量的元数据配置。 Ofcourse Weld也需要一个xml,但它没有强制要求进行大量配置。
答案 0 :(得分:3)
ninject允许您在代码中绑定类似的类型:
Bind<IWarrior>().To<Ninja>();
用于使用属性的ninject进行上下文绑定,请查看this
使用
创建一个属性来装饰你的类class ClimberNeeded : Attribute{}
使用给定的上下文WhenClassHas
Bind<IWarrior>().To<Samurai>().WhenClassHas<ClimberNeeded>();
使用属性装饰你的类。
[ClimberNeeded]
class MountainousAttack {
[Inject]
IWarrior StandardMountainWarrior { get; set; }
}
此处StandardMountainWarrior
将是Samurai
而不是Ninja
。
然后有TinyIOC哪个更好,它有autoregister :)或者你可以这样做:
container.Register<IMyInterface, MyImplementation>();
和funq可以让你编写聪明的代表来解决你的类型。这真的缺乏文档。但是有一个很好的vidcast。
当然还有很多。例如unity,structuremap和windsor都具有“代码”配置。
答案 1 :(得分:1)
我也投票给NInject。但几乎任何其他用于.NET的IoC容器现在都可以进行代码配置。我建议避免使用注释,但更喜欢构造函数注入。由于我们处于.NET世界中,注释或更好的属性会使您的代码与容器耦合,这听起来像反模式,因为您主要使用容器来减少代码耦合。