我熟悉Ninject,但不熟悉Spring.Net。我试图确定Spring.net中是否存在等效的“Ninject.Extensions.Conventions”。允许基于约定的映射的东西。 E.G - 允许我定义如下规则的东西:
由于
答案 0 :(得分:1)
不,Spring.NET几乎没有Code as Configuration,因此根本无法进行自动注册。
答案 1 :(得分:1)
Spring.net使用不同的方法,它们具有依赖于属性的CodeConfig,基本上你在类中设置了一些属性,以便DI容器知道需要注入哪些类。您可以找到更多信息here
对我来说,配置IOC的最佳方法是使用xml文件,因为您可以控制应用程序的行为而无需编译任何内容,即使在生产环境中也是如此。
答案 2 :(得分:1)
使用Spring.AutoRegistration还有另一种选择。与Unity AutoRegistration一样使用的概念。
http://rafaelnaskar.blogspot.com.br/2012/12/springautoregistration-fluent.html
https://www.nuget.org/packages/Spring.AutoRegistration
var context = new GenericApplicationContext();
context.Configure()
.IncludeAssembly(x => x.FullName.StartsWith("Company.ApplicationXPTO"))
.Include(x => x.ImplementsITypeName(), Then.Register().UsingSingleton()
.InjectByProperty(If.DecoratedWith<InjectAttribute>))
.ApplyAutoRegistration();
var context = new GenericApplicationContext();
context.Configure()
.Include(If.DecoratedWith<NamedAttribute>,Then.Register().UsingSingleton().InjectByProperty(If.DecoratedWith<InjectAttribute>))
.Include(If.Implements<IController>,
Then.Register().UsingPrototype().InjectByProperty(If.DecoratedWith<InjectAttribute>))
.ApplyAutoRegistration();
var context = new GenericApplicationContext();
context.Configure()
.IncludeAssembly(x => x.FullName.StartsWith("Spring.AutoRegistration.Test"))
.Include(x => x.GetInterfaces().Length > 0,
Then.Register().WithNamedAttributeIfExists().UsingPrototype()
.InjectByProperty(If.DecoratedWith<InjectAttribute>))
.ApplyAutoRegistration();