>> «Является ли использование Spring.Net выгодным для нас?»
Я думаю, что дух вашего вопроса в большей степени направлен на то, чтобы поставить под сомнение преимущества использования инфраструктуры IoC / DI по сравнению с ручным управлением зависимостями по мере необходимости. Мой ответ будет сосредоточен больше на том, почему и почему не IoC / DI, а не на том, какую конкретную структуру использовать.
Как отметил Мартин Фаулер на недавней конференции, DI позволяет вам отделить конфигурацию от использования. Для меня думать о DI с точки зрения конфигурации и использования как отдельных проблем - отличный способ начать задавать правильные вопросы. Нужно ли вашему приложению иметь несколько конфигураций для ваших зависимостей? Нужно ли вашему приложению изменять поведение в зависимости от конфигурации? Имейте в виду, это означает, что зависимости разрешаются во время выполнения и, как правило, требуют файл конфигурации XML, что удобно, поскольку изменения могут быть внесены без перекомпиляции сборки. Лично я не фанат конфигурации зависимостей на основе XML, так как они в конечном итоге потребляются как «волшебные строки». Таким образом, существует опасность появления ошибок во время выполнения, если вы в конечном итоге неправильно введете имя класса и т. Д. Но если вам нужна возможность настраивать на лету, это, вероятно, лучшее решение на сегодняшний день.
С другой стороны, существуют структуры DI, такие как Ninject и StructureMap, которые позволяют свободно определять определения в коде. Вы теряете возможность менять определения на лету, но получаете дополнительное преимущество проверки времени компиляции, которую я предпочитаю. Если все, что вам нужно от структуры DI - это разрешение зависимостей, то вы можете исключить основанные на XML структуры из уравнения.
С точки зрения Silverlight DI можно использовать по-разному. Наиболее очевидным является определение отношения Views к ViewModels. Однако, углубляясь, вы можете определить валидацию, контекстные зависимости RIA и т. Д. Наличие всех зависимостей, определенных в классе конфигурации, избавляет код от необходимости знать, как получать / создавать экземпляры, и вместо этого сосредоточиться на использовании. Не забывайте, что контейнер может управлять временем жизни каждого экземпляра объекта на основе вашей конфигурации. Поэтому, если вам необходимо предоставить общий доступ к экземпляру типа (например, Singleton, ManagedThread и т. Д.), Это поддерживается объявлением области действия каждого типа, зарегистрированного в контейнере.
Я только что понял, в этот момент я ругаю и извиняюсь. Надеюсь, это поможет!