Spring.Net是否有任何基于约定的绑定(如Ninject.Extensions.Conventions)

时间:2011-04-20 15:20:57

标签: .net dependency-injection inversion-of-control spring.net

我熟悉Ninject,但不熟悉Spring.Net。我试图确定Spring.net中是否存在等效的“Ninject.Extensions.Conventions”。允许基于约定的映射的东西。 E.G - 允许我定义如下规则的东西:

  • 期望给定命名空间或程序集中的所有具体类具有相同名称的相应接口,但前缀为I.自动将它们相互映射。

由于

3 个答案:

答案 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();