我熟悉Ninject,但不是Spring.Net。我試圖確定Spring.net中是否有相當於「Ninject.Extensions.Conventions」。允許基於約定的映射的東西。 EG - 這將讓我定義如下規則:Spring.Net是否有任何基於約定的綁定(如Ninject.Extensions.Conventions)
- 期望在一個給定的命名空間或部件的所有具體類具有相同名稱的相應的接口,但前面加上了一自動映射這些每其他。
感謝
我熟悉Ninject,但不是Spring.Net。我試圖確定Spring.net中是否有相當於「Ninject.Extensions.Conventions」。允許基於約定的映射的東西。 EG - 這將讓我定義如下規則:Spring.Net是否有任何基於約定的綁定(如Ninject.Extensions.Conventions)
感謝
沒有,Spring.NET勉強有守則配置,所以自動登記不可用的。
Spring.net使用不同的方法,它們具有依賴於屬性的CodeConfig,基本上,您在類中設置了一些屬性,以便DI容器知道需要注入哪些類。您可以找到更多信息here
對我來說,配置IOC的最佳方式是使用xml文件,因爲即使在生產環境中,您也可以在不編譯任何內容的情況下控制應用程序的行爲。
還有一個使用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();