Контейнеры IOC и IDisposable
Мне было рекомендовано, чтобы при использовании контейнера IOC я изменил это:
class Foobar: IFoobar, IDisposable {};
В это:
interface IFoobar: IDisposable{};
class Foobar : IFoobar{};
Мне интересно, если это нормально, или это решает одну проблему и создает другую. Это, безусловно, решает проблему, где я очень хочу сделать это:
using( IFoobar = myContainer.Resolve<IFoobar>() )
{ ... }
И теперь я знаю, что любая замена не вызовет ошибку во время выполнения.
С другой стороны, теперь все мои фиктивные объекты также должны обрабатывать IDisposable. Я прав, что большинство насмешливых фреймворков справляются с этим легко? Если да, то, возможно, это не проблема.
Либо это? Есть ли еще одна скрытая ошибка, за которой я должен следить? Мне, конечно, приходит в голову, что если бы я использовал контейнер IOC не для модульных тестов / макетов, а для истинной независимости сервисов, то это могло бы быть проблемой, потому что, возможно, только один из моих заменяемых сервисов фактически имеет дело с неуправляемыми ресурсами (и теперь я ' я должен реализовать пустые операции "IDispose" в этих других службах).
Даже эта последняя проблема, с которой, я полагаю, я мог бы жить, чтобы получить возможность использовать выражение «использование», как я продемонстрировал выше. Но я следую популярному соглашению, или я пропускаю совершенно другое и лучшее решение?