kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Nate222
Nate222
Вопрос

Руководящие принципы для Dispose() и Ninject

Итак, у меня есть метод, открываемый из службы WCF:

public GetAllCommentsResponse GetAllComments(GetAllCommentsRequest request)
{
    var response = new GetAllCommentsResponse();

    using(_unitOfWork)
        try
        {
            Guard.ArgNotNull(request, "request");

            var results = _unitOfWork.CommentRepository.Get(d => d.Id > 0).ToArray();

            //... Do rest of stuff here
        }
        catch (Exception ex)
        {
            response.Success = false;
            response.FailureInformation = ex.Message;
            Logger.LogError("GetAllComments Method Failed", ex);
        }

    return response;
}

У меня есть глобальный объект DataUnitOfWork (который реализует IDisposable), который инстанцируется Ninject через аргумент конструктора, когда приходит вызов сервиса. При отладке, если я использую

using(_unitOfWork)

объект _unitOfWork утилизируется сразу после выхода из области видимости, а затем снова вызывается Ninject (хотя он был помечен как утилизированный, поэтому ничего не происходит). Без оператора using Ninject выполняет утилизацию.

Короче говоря, есть ли общее эмпирическое правило для этого? Меня пугает вся эта штука с IDisposable после того, как все, что я прочитал, кажется, говорит о том, что никогда не стоит его использовать, или использовать его в определенных эклектичных ситуациях, но это всегда сбивало меня с толку.

Любой вклад будет оценен по достоинству.

И еще, пока я тут печатаю, почему при утилизации нужно вызывать GC.SuppressFinalize()? Чем отличаются Dispose и Finalize?

31 2012-04-19T18:49:41+00:00 1
 Blorgbeard
Blorgbeard
Редактировал вопрос 26-го июня 2014 в 10:42
Программирование
.net
c#
garbage-collection
ninject
idisposable
Решение / Ответ
Remo Gloor
Remo Gloor
20-го апреля 2012 в 8:06
2012-04-20T08:06:10+00:00
Дополнительно
Источник
Редактировать
#15984631

В документации CLR говорится, что тот, кто создает объект Disposable, отвечает за вызов Dispose. В данном случае объект создается Ninject. Это означает, что вы не должны явно вызывать Dispose.

Ninject утилизирует каждый объект Disposable, который имеет другую область видимости, кроме InTransientScope как только объект области видимости, к которому привязан созданный объект, будет собран GC. Поэтому каждый объект Disposable должен быть Bind с областью видимости, которая не является InTransientScope(). Например, вы можете использовать InParentScope() из расширения NamedScope, который утилизирует объект, как только объект, в который он внедрен, будет собран.

Luke Hutton
Luke Hutton
Редактировал ответ 27-го января 2015 в 11:05
48
0
Похожие сообщества 16
DotNetRuChat
DotNetRuChat
6 630 пользователей
Чат русскоязычного .NET сообщества http://dotnet.ru/ Правила: https://t.me/DotNetRuChat/704399 Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia, @DotNetRuJobs, @uwp_ru Флуд в @dotnettalks
Открыть telegram
Вакансии .NET
Вакансии .NET
3 530 пользователей
Правила: https://t.me/DotNetRuJobs/123 Канал с вакансиями - https://t.me/DotNetRuJobsFeed Вам могут быть интересны: @dotnetruchat, @cilchat, @fsharp_chat, @pro_net, @AvaloniaRU, @xamarin_russia Флуд в @dotnettalks
Открыть telegram
Microsoft Stack Jobs
Microsoft Stack Jobs
2 414 пользователей
Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks
Открыть telegram
С#
С#
2 330 пользователей
Стараемся не флудить. Пишем по делу. Правила: https://t.me/professorweb/430450 Для флуда @svoboda_obsh
Открыть telegram
pro.net
pro.net
1 820 пользователей
Обсуждение .NET и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). https://t.me/pro_net/34653 Флудилка: @dotnettalks
Открыть telegram
CODE BLOG / C#
CODE BLOG / C#
1 763 пользователей
Чат для .NET разработчиков и C# программистов. По всем вопросам: @shwanoff Youtube-канал: https://youtube.com/codeblog Основной канал: @codeblog Вконтакте: https://vk.com/codeblog Правила: https://t.me/codeblog_csharp/246972 Вакансии по тегу #work
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 3 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией