Это неправильное использование Dispose (). Если вы заметили, что написали:
this.Dispose();
this._jobsRepository.Dispose();
Оба они относятся к одному и тому же объекту. Чтобы гарантировать, что вы утилизируете только один раз, это возможность повторного использования класса, объявляющего IDisposable для вызова dispose.
Это означает, что если вы создаете локальную переменную, вы делаете это в операторе using:
using(SomethingDisposable foo = new SomethingDisposable())
{
//...
}
или явно распоряжаться:
SomethingDisposable foo = new SomethingDisposable();
try
{
//...
}
finally
{
((IDisposable)foo).Dispose();
}
Если вы создаете поле, вы также делаете свой класс одноразовым:
class MyDisposable : IDisposable
{
private SomethingDisposable foo = new SomethingDisposable();
void IDisposable.Dispose()
{
foo.Dispose();
}
}
Если вы относитесь к таким IDisposables таким образом, ваша обработка исключений не будет путаться с вашим удалением.