Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Попробовал перевести проект на IoC. но не сразу все, а постепенно. Возможно ли такое или придется все сразу переделывать? И еще вопрос с реализацией. Использую Autofac пока. На нем тренируюсь. Начал с репозиторий. Взял 1 из репозиторий, она является самостоятельным классом и реализовал интерфейс. Теперь класс выглядит так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. Прописал при запуске конфигурацию IoC Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Теперь вопрос, как поступить вот с этим: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Если я все правильно понимаю, то данный класс должен быть также наследовать интерфейс IDataManager? Что здесь лишнее или что я забыл, чтобы часть, а именно UserRepository заработала, как DI? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 09:54 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaВозможно ли такое или придется все сразу переделывать? возможно. но рекомендую задаться целью, для чего вам нужен DI, и какие преимуществ конкретно вы хотите добиться? так вам будет проще, чем тупо "переводить всё на DI". PavluhaЧто здесь лишнее или что я забыл, чтобы часть, а именно UserRepository заработала, как DI? старайтесь передавать зависимости через конструктор: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 11:26 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Pavluha, если где-то получается, что компонент требует много зависимостей (и вам кажется, что конструктор от этого распух), значит проблема в архитектуре. также постарайтесь избежать "аггрегатора" зависимостей, собирающего кучу зависимостей и раздающего направо и налево. лучше передать фабрику на базе DI-контейнера. Autofac, кстати, хороший выбор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 11:28 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Сейчас сделал так и пока работает, но хотелось бы комментариев на правильность: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 11:58 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaСейчас сделал так и пока работает, но хотелось бы комментариев на правильность: плохо. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. получайте IUserRepository через конструктор (как я показал выше). и постарайтесь свести использование DependencyResolver к минимуму. желательно, чтобы он вообще не появлялся, ну кроме тех мест, где механизм разрешения зависимостей DI недоступен (например, в HttpApplication). и ещё один момент. у вас IDataManager выполняет роль DI, отдавая ModelDataContextWrapper с помощью метода Get(). зачем? получайте свой ModelDataContextWrapper точно также через DI. или через фабрику. а вообще при использовании репозитория, дата контекст вообще не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 12:27 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVosttполучайте свой ModelDataContextWrapper точно также через DI А пример можно? Просто у меня модель используется DBML не EF. В инете ничего путного не нашел. А сам DataManager это менеджер репозиторий с lazy инициализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:32 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Вроде начал догонять. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. У меня репозиторий вот столько: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Их все в конструкторе указывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:37 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Фабрику реализовал: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Теперь вообще запутался, куда и как ее прикручивать ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:06 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaТеперь вообще запутался, куда и как ее прикручивать ((( не-не.. Код: c# 1. и получайте где требуется IModelDataContext. незачем пилить свою собственную фабрику, если не планируется использовать её как точку расширения, или не используются дополнительные вариативные зависимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:09 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, IModelDataContext не реализован, да и как его реализовать понятия не имею. В EF как-то файл *.tt переписывали, а с dbml вообще непонятно или все не так понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:12 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaИх все в конструкторе указывать? указывайте в конструкторе только те, которые реально используются. зачем все? а SubmitChanges() я бы вынес отдельно: Код: c# 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:14 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
А если вот так сделать Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:15 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaIModelDataContext не реализован, да и как его реализовать понятия не имею. не обязательно интерфейс. можете класс зарегистрировать, без IModelDataContext. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:15 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaА если вот так сделать Код: c# 1. да, можно и так. в зависимости от того, что вам от него нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:16 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Нужен сам контекст Код: c# 1. 2. 3. 4. Чтобы потом его убрать из DataManager и использовать, как вы описали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:17 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaА сам DataManager это менеджер репозиторий с lazy инициализацией. Lazy-инициализация: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:19 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhahVostt, Нужен сам контекст Код: c# 1. 2. 3. 4. Чтобы потом его убрать из DataManager и использовать, как вы описали Код: c# 1. если для ASP.NET MVC вы используете интеграцию Autofac.Mvc, то InstancePerLifetimeScope означает время жизни HttpContext. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:21 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Тогда получается все в конструкторе указывать, все репозитории? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:21 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhahVostt, Тогда получается все в конструкторе указывать, все репозитории? все, которые нужны , если где-то нужны вообще все, значит что-то не так с архитектурой. но если их слишком много, тогда можно обойтись публичными попертями в Lazy-обёртке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:24 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Если я все правильно понял, то принцип такой: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:25 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaЕсли я все правильно понял, то принцип такой: да, всё верно, в этом и смысл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:28 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Тогда есть несколько вопрос по вашим Вы сказали: все, которые нужны, если где-то нужны вообще все, значит что-то не так с архитектурой. но если их слишком много, тогда можно обойтись публичными попертями в Lazy-обёртке. Как тогда поступить с классом DataManager, если это класс есть простое хранилище всех репозиторий И ссылка на него передается в фабрике: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. Неправильная архитектура? Т.к. в конструкторе придется передавать все репозитории. Где я ошибся? Явно что-то не так Потому что в контроллере дальше идет такие вещи типа: Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:33 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaКак тогда поступить с классом DataManager, если это класс есть простое хранилище всех репозиторий у вас уже есть DI (который Autofac), который является хранилищем всех репозиторий. зачем вам ещё один, свой? единственный полезный метод SaveChanges стоит вынести в отдельный интерфейс типа IUnitOfWork, и использовать его там, где требуется сохранение информации. PavluhaПотому что в контроллере дальше идет такие вещи типа: Код: c# 1. если хотите работать в контроллере с пользователями, получайте в контроллере объект IUserRepository. в общем, получаейте те репозитории, которые вам в контроллере нужны. если же у вас контроллер, которому нужны все репозитории, то наверное это не очень хороший контроллер, может его разделить на несколько? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 14:46 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Но тогда получается надо абстрагироваться от определенных репозиторий и передавать, например, IRepository, и уже в контроллере приводить его к типу IUserRepository. И тогда класс DataManager вообще не нужен. (Есть контроллеры, в которых необходим доступ к др репозитории, что ограничивает фабрику контроллеров) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:04 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Почему я ввязался в IoC. Стали возникать потребности в поддержке других СУБД, вот я и решил переписать DAL. Т.е. таким способом, если возникнет вопрос о реализации поддержки другой СУБД, то достаточно написать другой DAL для той СУБД, а все остальное вообще не изменится. Правильный ли данный подход или надо было не городить огород, а просто использовать абстрактную фабрику и все? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:11 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaНо тогда получается надо абстрагироваться от определенных репозиторий и передавать, например, IRepository, и уже в контроллере приводить его к типу IUserRepository. этого точно делать не нужно. но можно сделать так: Код: c# 1. 2. 3. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. PavluhaПравильный ли данный подход или надо было не городить огород, а просто использовать абстрактную фабрику и все? можно и так, но думаю приведение типов -- не лучший вариант использования возможностей DI. тем более такого, как Autofac. этот зверь много чего умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:26 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Немного запутался... ((( Как мне тогда работать с шаблоном фабрики В данном случае все понятно Код: c# 1. 2. 3. 4. но есть и такое: Код: c# 1. 2. 3. 4. Фабрика не работает в таком случае, массив надо передавать или переписывать и дублировать методы репозиторий Самый простой вариант это дублировать методы репозиторий (Их не очень много) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:49 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
И еще вопрос по поводу этого: Код: c# 1. На вход тогда пойдет IRepository<>? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:55 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Нашел пример для фабрики Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Почему contr.ControllerContext = null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:14 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaФабрика не работает в таком случае, массив надо передавать или переписывать и дублировать методы репозиторий Самый простой вариант это дублировать методы репозиторий (Их не очень много) почему не работает? PavluhaНашел пример для фабрики если используете Autofac, то не надо реализовывать свою фабрику контроллеров: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. вот и всё в принципе, что нужно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:18 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Видимо я уже не догоняю. Как контроллер на входе получит тогда ModelContext? Если мы ничего и нигде не указали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:33 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Pavluha, почитай пожалуйста https://code.google.com/p/autofac/wiki/MvcIntegration там всё написано про интеграцию Autofac в ASP.NET MVC. лишних телодвижений совершать не нужно. просто регистрируй свои сервисы, об остальном уже позаботились :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:35 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Основную идею я понял, но это частный случай. И если я все правильно понял и у меня 2 фабрики: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. и как вы пишите, что их не надо так добавлять То тогда при конфигурировании я сам должен решить какая фабрика будет, а этим этого уже не решить Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:53 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaТо тогда при конфигурировании я сам должен решить какая фабрика будет, а этим этого уже не решить блин, дак в этом и вся суть! в одном конкретном месте вы регистрируете нужные вам компоненты. если поизучаете Autofac, то найдёте способы очень гибко конфигурировать создание объектов в момент их запроса на уровне регистрации компонентов. сама возможность создавать фабрики контроллеров в MVC сделана для тестирования. никакого смысла создавать разные фабрики по какому-то условию нет. но и даже такой вариант использования можно провернуть в Autofac, не ковыряя фабрики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 17:03 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Допустимо ли такое или это жесть: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:03 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaДопустимо ли такое или это жесть: жесть :) наверное стоит Activator.CreateInstance заменить на резолвинг с помощью DI. а вообще, можно поинтересоваться, зачем вам понадобился свой GetControllerInstance? просто изучаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:07 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, Есть 2 фабрики ControllerFactory, в зависимости от определенных условий, при старте системы подсовывается та или другая: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:11 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhaЕсть 2 фабрики ControllerFactory, в зависимости от определенных условий, при старте системы подсовывается та или другая: было бы конечно очень любопытно узнать для чего это всё. какие условия. и да, в зависимости от этих условий можно регистрировать разные фабрики в DI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 13:51 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVosttбыло бы конечно очень любопытно узнать для чего это всё. какие условия. В зависимости от списка доступных модулей подключается или нет та или иная фабрика контроллеров hVosttи да, в зависимости от этих условий можно регистрировать разные фабрики в DI. А можно пример? Просто отказаться от них пока нет возможности, в них есть доп проверки на доступность тех или иных контроллеров от установленных настроек в системе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 14:17 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 14:23 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Все беды из-за того что не должно быть некого всеобъемлющего DataManager'а, сборной солянки из всех репозиториев. Обычная практика - создавать типы, отвечающие за определенный род деятельности и предоставляющие необходимое API. Например UserManager или UserService, который будет оперировать IUserRepository и IAuditRepository. Дальше к примеру операция создания юзера должна дернуть юзер репозиторий и записать это событие в аудит журнал. Все зависимости инжектить через конструктор без всяких там паблик свойств, т.е. юзер менеджер не должен давать доступ к своим репозиториям, он должен лишь иметь методы типа CreateUser, LoadUsers и т.д. Почитай про onion architecture, например тут http://www.develop.com/onionarchitecture ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 16:50 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
PavluhahVostt, Немного запутался... ((( Как мне тогда работать с шаблоном фабрики В данном случае все понятно Код: c# 1. 2. 3. 4. но есть и такое: Код: c# 1. 2. 3. 4. Фабрика не работает в таком случае, массив надо передавать или переписывать и дублировать методы репозиторий Самый простой вариант это дублировать методы репозиторий (Их не очень много) Контроллер не должен оперировать репозиториями. Репозиторий должен тупо выполнять CRUD операции надо определенным типом сущности. Дальше должен быть сервис или менеджер типа UserService, который дергает нужные ему репозитории и содержит бизнес логику, транзакционные методы, батч операции и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 16:59 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Евгений З, А он и не оперирует у меня сейчас. Каждый контроллер получает на входе IDatamanager. IDataManager имеет доступ к I....Repository, которая в свою очередь уже работает с данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 17:14 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Подскажите, как лучше сделать "инъекцию" в UserProvider Сейчас все выглядит так: Код: c# 1. 2. 3. Как теперь настроить builder? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 11:26 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
Pavluha Код: c# 1. зачем оно вам? мсу наслушались? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 11:42 |
|
||
|
IoC. Постепенный перевод проекта. Возможно ли
|
|||
|---|---|---|---|
|
#18+
hVostt, У меня form-аутентификация с разными плюшками, поэтому и реализовал провайдер пользователей и ролей тоже. МСУ тут ни при чем Я вроде решил проблему таким способом: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2014, 11:51 |
|
||
|
|

start [/forum/topic.php?all=1&fid=18&tid=1357367]: |
0ms |
get settings: |
8ms |
get forum list: |
22ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 372ms |

| 0 / 0 |
