, я понимаю, что один из (возможно, лучший) способов использования инверсии управления - это внедрение зависимых объектов через конструктор (внедрение конструктора).
Однако, если я Вызов этих объектов вне объекта, использующего их, я чувствую, что нарушаю какое-то правило - это так? Я не думаю, что есть способ предотвратить это,
[EDIT] Вот упрощенный пример того, что я делаю. У меня есть объект FileController
, который в основном используется для каталогизации файлов. Он использует объект FileDal
, который обращается к базе данных для вставки / запроса / обновления таблиц File
и Directory
.
В моей реальной реализации я создаю контроллер указав Castle использовать версию DAL для SQL Server, в своем модульном тесте я использую версию DAL на Sqlite в памяти. Однако из-за того, как реализован DAL, мне нужно вызвать BeginTransaction и Commit вокруг использования FileController
, чтобы соединение не закрывалось, и я мог позже выполнять извлечения и утверждения. Почему я должен это делать, не так уж важно, но это навело меня на мысль, что вызов методов объекта DAL, который используется другими клиентами (контроллерами), не звучит кошерно. Вот пример:
FileDal fileDal = CastleFactory.CreateFileDal();
fileDal.BeginTransaction();
FileController fileController = new FileController(fileDal);
fileController.CallInterestingMethodThatUsesFileDal();
fileDal.Commit();