Ребята Мне нужна ваша помощь Я использую контейнер проекта Windsor IoC в моем приложении C# Winforms. У меня есть классы сервисов, у которых DI с помощью конструктора, проходящего в реализации Репозиториев. Я использовал Windsor, чтобы зарегистрировать их все Component.Register (... и т. Д., Но каждый раз, когда я использую свой класс обслуживания, я вызываю решение. Например:
var employeeService = container.Resolve....etc
есть ли другой способ не звонить все время? в ASP.NET вы можете просто зарегистрировать их затем установите контроллер завод:. ControllerBuilder.Current.SetControllerFactory(new WindsorIoCFactory());
с этим я могу просто использовать мои контроллеры (с использованием услуг) непосредственно без вызова решительности, как вы это делаете в WinFormsWindsor Ioc во избежание вызова все время
ответ
вас? следует использовать подход Composition Root.
Одним словом, вы должны использовать Решайте только один раз в App-StartUp, в основном разрешая MainView, и через это вы сможете получить все виды (скорее всего, через TypedFactory) и их зависимости без явного вызова Resolve.
Подход локатора сервисов, как и ссылка на комментарий, является отталкивающим анти-шаблоном, особенно если вместо него можно использовать Корень композиции.
На виндзорской вики вы найдете образец, основанный на Silverlight app, очень близком к сценарию Winform.
Спасибо Криштиану! будет проверять состав Root – Patrick87
Привет, Криштиану. Если у меня есть много сервисов, скажите сотруднику, клиенту ..etc и зарегистрируйте их все в начале или в основном методе в winforms, который действует как корень композиции, у меня нет проблемы, но где я должен поместить мой экземпляр контейнера? это должно быть место, подобное основному, или оно должно быть статичным, когда я могу назвать его глобально для правильного разрешения? oh, и есть еще одна вещь, например, фабрика Resolve? Так что я не буду ссылаться (используя [namespace]) в каждом файле .cs, который я вызываю? – Patrick87
Прочтите это http://mookid.dk/oncode/archives/1854, вы должны получить все свои ответы ... плюс образец silverlight из вики, как указано выше. Но да, ваш контейнер должен быть похоронен как частная переменная в классе «Main»/StartUp, и никто извне не должен обращаться к нему напрямую или через ServiceLocator, ака «зло» (cit. Krzysztof Koźmic) :-) – Crixo
- 1. Windsor IoC DefaultControllerFactory
- 2. Как установить замок Windsor IOC?
- 3. Windsor IoC с Umbraco 7.2.1
- 4. Использование контейнеров IoC; специально Windsor
- 5. IoC Castle Windsor в проблеме маршрутизации MVC
- 6. IOC on IValidationDictionary with Castle Windsor
- 7. Замок Windsor IoC вставляет свойство в конструктор
- 8. Замок Windsor IOC в контроллере MVC
- 9. IoC (Castle Windsor) и статические помощники
- 10. Обнаружение цикла цикла IOC с помощью Windsor
- 11. Замок Windsor IOC с пользовательским .NET Membership?
- 12. Весна IoC: условная инъекция во время выполнения
- 13. контейнер IoC, проверьте наличие ошибок во время компиляции
- 14. Во избежание выполнения onPostExecute()
- 15. удалить во избежание рекурсии
- 16. Можно ли зарегистрировать делегатов в контейнере IOC Castle Windsor?
- 17. Чистый способ вызова диалогового окна Vex во избежание повторения кода?
- 18. Во избежание onCreate() функция вызова активности при нажатии кнопки «Назад»
- 19. Преобразование вызова AJAX во избежание проблем с перекрестными доменами
- 20. Замок Windsor IoC пытается разрешить файлы CSS (среди прочих)?
- 21. Привязка структуры во избежание AccessViolationException
- 22. try/catch во избежание .stackdump
- 23. Stack_Overflow_error во время вызова метода
- 24. Как свободно владеть контентом в замке Windsor IOC-контейнере
- 25. Блоки нитей во время вызова
- 26. Не проверял() все аргументы во время последующего вызова метода
- 27. Ошибка во время установки вызова
- 28. Застрял во время вызова webservices
- 29. метод вызова во время выполнения
- 30. Разница во времени IoC
Я думаю, что это [ответ] (http://stackoverflow.com/a/4840907/1346943) должен помочь вам –