基于注释的DI与生产者

时间:2012-07-27 08:17:49

标签: c# .net dependency-injection ioc-container

.Net世界中是否有任何DI框架很简单,并且不需要太多的元数据配置。使用xml等?

来自Java世界的一个很好的例子是JBoss Weld。使用Weld,可以使用返回对象的生成器方法(可以使用自定义注释标记的方法)。上面生产的物体可以在需要时注入。这节省了大量的元数据配置。 Ofcourse Weld也需要一个xml,但它没有强制要求进行大量配置。

2 个答案:

答案 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


当然还有很多。例如unitystructuremapwindsor都具有“代码”配置。

答案 1 :(得分:1)

我也投票给NInject。但几乎任何其他用于.NET的IoC容器现在都可以进行代码配置。我建议避免使用注释,但更喜欢构造函数注入。由于我们处于.NET世界中,注释或更好的属性会使您的代码与容器耦合,这听起来像反模式,因为您主要使用容器来减少代码耦合。