.Net 世界中是否有任何简单且不需要太多元数据配置的 DI 框架,例如。使用xml等?
Java 世界的一个很好的例子是 JBoss Weld。使用 Weld,可以有返回对象的生产者方法(可以用自定义注释标记的方法)。上面生成的对象可以在需要的地方注入。这节省了大量的元数据配置。当然 Weld 也需要一个 xml,但它不要求进行广泛的配置。
.Net 世界中是否有任何简单且不需要太多元数据配置的 DI 框架,例如。使用xml等?
Java 世界的一个很好的例子是 JBoss Weld。使用 Weld,可以有返回对象的生产者方法(可以用自定义注释标记的方法)。上面生成的对象可以在需要的地方注入。这节省了大量的元数据配置。当然 Weld 也需要一个 xml,但它不要求进行广泛的配置。
ninject可以让你在代码中像这样绑定你的类型:
Bind<IWarrior>().To<Ninja>();
对于使用属性的 ninject 的上下文绑定,请查看此
创建一个属性来装饰你的类
class ClimberNeeded : Attribute{}
将接口绑定到具有给定上下文的实现WhenClassHas
Bind<IWarrior>().To<Samurai>().WhenClassHas<ClimberNeeded>();
用属性装饰你的类。
[ClimberNeeded]
class MountainousAttack {
[Inject]
IWarrior StandardMountainWarrior { get; set; }
}
这里StandardMountainWarrior
将是 aSamurai
而不是 a Ninja
。
然后是TinyIOC,它具有自动注册功能,更好 :) 或者您可以这样做:
container.Register<IMyInterface, MyImplementation>();
还有funq,它可以让你编写聪明的委托来解析你的类型。这确实缺乏文档。但是有一个不错的视频广播。
当然还有更多。例如unity、structuremap和windsor,它们都具有“代码”配置。
我也投票给NInject。但现在几乎所有其他用于 .NET 的 IoC 容器都是代码可配置的。我确实建议避免使用注释,而是更喜欢构造函数注入。注释,或者因为我们在 .NET 世界中更好的属性,使您的代码与容器耦合,这听起来像是一种反模式,因为您使用容器主要是为了减少代码耦合。