Контейнеры IOC и IDisposable

Мне было рекомендовано, чтобы при использовании контейнера IOC я изменил это:

class Foobar: IFoobar, IDisposable {};

В это:

interface IFoobar: IDisposable{};
class Foobar : IFoobar{};

Мне интересно, если это нормально, или это решает одну проблему и создает другую. Это, безусловно, решает проблему, где я очень хочу сделать это:

using( IFoobar = myContainer.Resolve<IFoobar>() )
{ ... }

И теперь я знаю, что любая замена не вызовет ошибку во время выполнения.

С другой стороны, теперь все мои фиктивные объекты также должны обрабатывать IDisposable. Я прав, что большинство насмешливых фреймворков справляются с этим легко? Если да, то, возможно, это не проблема.

Либо это? Есть ли еще одна скрытая ошибка, за которой я должен следить? Мне, конечно, приходит в голову, что если бы я использовал контейнер IOC не для модульных тестов / макетов, а для истинной независимости сервисов, то это могло бы быть проблемой, потому что, возможно, только один из моих заменяемых сервисов фактически имеет дело с неуправляемыми ресурсами (и теперь я ' я должен реализовать пустые операции "IDispose" в этих других службах).

Даже эта последняя проблема, с которой, я полагаю, я мог бы жить, чтобы получить возможность использовать выражение «использование», как я продемонстрировал выше. Но я следую популярному соглашению, или я пропускаю совершенно другое и лучшее решение?

Ответы на вопрос(1)

Ваш ответ на вопрос