|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Всем привет, хочу при запуске AspCore 2.1 проекта проинициализировать некоторые данные - в частности добавить роли. Делаю это так Код: 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.
в ConfigureServices Код: c# 1. 2. 3.
в Configure Код: c# 1.
Когда код доходит до RoleManager.RoleExistsAsync(item) я получаю ошибку ObjectDisposedException, то есть в конструкторе RoleManager еще не Disposed, а пока дойдет до RoleManager.RoleExistsAsync сборщик мусора его уже забирает, хотя не должен-я ведь держу на него ссылку в свойстве protected private RoleManager. Почему сборщик все равно забирает RoleManager? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:34 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Сборщик-то тут причем? ObjectDisposedException возникает когда кто-то вызвал Dispose, а не когда сборщик прошел ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:37 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subто есть в конструкторе RoleManager еще не Disposed, а пока дойдет до RoleManager.RoleExistsAsyncЗначит Initialize вызывается уже тогда, когда скоуп для RoleManager уже закончился. Показывай код инстанцирования и использования RolesHelper ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:40 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro, кроме кода, который я привел - больше нигде дополнительной логики по работе с RolesHelper я не использую. Код: 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86.
Соответственно инстанциирую и использую на строке Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:53 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subв Configure Код: c# 1.
Не скажу на 100% что дело в этом, но для начала стоит поменять вот так: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 13:58 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_sub Код: c# 1.
а ничего что в Core ушли от ролевой аутентификации к claim-based? Т. Е. что то типа такого: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:09 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Сделай Initialize асинхронным и вызывай через await Естественно RoleManager умирает раньше, чем закончится выполнение Initialize, потому что ты его не ожидаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:14 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.ProСделай Initialize асинхронным и вызывай через await Естественно RoleManager умирает раньше, чем закончится выполнение Initialize, потому что ты его не ожидаешь Ну да, я выше уже написал, что Wait() к вызову надо добавить. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:16 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
и вообще - наличиеvb_sub Код: c# 1.
признак того, что создаешь себе проблемы на ровном месте ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:16 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatНу да, я выше уже написал, что Wait() к вызову надо добавить.лучше сделать как положено ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:18 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatНу да, я выше уже написал, что Wait() к вызову надо добавить. Ну ёмаё.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:20 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Proлучше сделать как положено Через await его не вызовешь, потому что для этого надо делать асинхронным сам Configure, а это, afaik, asp.net еще не умеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:23 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatЧерез await его не вызовешь, потому что для этого надо делать асинхронным сам Configure, а это, afaik, asp.net еще не умеет.посмотри в приведенный код vb_sub Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:25 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Proи вообще - наличиеvb_sub Код: c# 1.
признак того, что создаешь себе проблемы на ровном месте Изначально Initialize был Async Task и было Код: c# 1.
-ошибка аналогичная, я сначала подумал, что await как-то неправильно дожидается ход выполнения и начал раскручивать в синхронную версию, но из-за того, что у RoleManager есть только асинхронная версия RoleExistsAsync, пришлось остановиться на async void. Собственно проблема не в асинхронности- при обоих вариантах RoleManager уже задиспозен. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:34 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Petro123vb_sub Код: c# 1.
а ничего что в Core ушли от ролевой аутентификации к claim-based? Т. Е. что то типа такого: Код: c# 1. 2. 3. 4.
Чем claim-based лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:43 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Значит надо создать скоуп, потому что лайвтайм RoleManager по идее Scoped ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:47 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
vb_subЧем claim-based лучше? 1. Полная поддержка из коробки 2. Комбинирование с соц.сетями и SSO. 3. Шире чем роли, т.к. Роль это просто ключ тире значение в claim. .... Выше константу для роли видел? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:49 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.ProЗначит надо создать скоуп, потому что лайвтайм RoleManager по идее Scoped Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:49 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro, скоуп дает аналогичную ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:50 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Я пробовал с AddScoped ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:50 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
пробуй CreateScope ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:51 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro Код: c# 1.
Оно не сработает. Configure это специальный метод, который вызывается извне, фреймворком, и тот требует, чтобы он был объявлен именно как "public void". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:51 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
fkthatОно не сработает.ты сам пробовал, чтобы это утверждать? fkthatтот требуетпусть требует, надо бы знать, что async - инструкция для компилятора, а не часть сигнатуры ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:54 |
|
RoleManager очень быстро диспозится.
|
|||
---|---|---|---|
#18+
Shocker.Pro, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Все получилось, спасибо. Только странно, из-за чего так пришлось велосипедить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 14:55 |
|
|
start [/forum/topic.php?fid=18&msg=39740905&tid=1355075]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
133ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 266ms |
total: | 517ms |
0 / 0 |