Есть ли в Spring.Net привязка, основанная на соглашениях (например, Ninject.Extensions.Conventions) - PullRequest
1 голос
/ 20 апреля 2011

Я знаком с Ninject, но не с Spring.Net.Я пытаюсь определить, есть ли в Spring.net эквивалент «Ninject.Extensions.Conventions».То, что позволяет отображать на основе соглашения.Например, что-то, что позволит мне определить правило, например:

  • Ожидается, что все конкретные классы в данном пространстве имен или сборке будут иметь соответствующий интерфейс с тем же именем, но с префиксом I. Автоматическое сопоставлениеэто друг другу.

Спасибо

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Spring.net использует другой подход, у них есть CodeConfig, который опирается на атрибуты, в основном вы устанавливаете некоторые атрибуты в ваших классах, чтобы Контейнер DI знал, какие классы нужно вводить.Вы можете найти больше информации здесь

Для меня лучший способ настроить IOC - это использовать файл XML, так как вы можете контролировать поведение своего приложения без компиляции чего-либо, даже в производственном процессе.окружающая среда.

1 голос
/ 31 декабря 2012

Существует еще один вариант использования Spring.AutoRegistration.Та же концепция, что и для Unreg 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();
1 голос
/ 20 апреля 2011

Нет, Spring.NET едва имеет код в качестве конфигурации, поэтому автоматическая регистрация вообще недоступна.

...