我知道使用控制反转的(也许是最好的)方法之一是通过构造函数(构造函数注入)注入依赖对象。我应该在注入期间使用传递给构造函数的对象吗?
但是,如果我打电话给这些对象外部使用它们的对象,我觉得我违反了某种规则 - 是这种情况吗?我不认为有什么办法可以防止这种情况发生,但是我应该建立一个规则(除了被嘲笑的对象之外),我们不应该从这些对象中调用方法?
[编辑]这是我正在做的一个简单的例子。我有一个FileController
对象,基本上用于编目文件。它使用与数据库交谈的FileDal
对象来插入/查询/更新File
和Directory
表。
在我真正的实现中,我通过指示Castle使用SQL Server版本的DAL来构建控制器,在我的单元测试中,我使用内存中的Sqlite版本的DAL。但是,由于DAL的实现方式,我需要在使用FileController
时调用BeginTransaction和Commit,以便连接不会关闭,我可以稍后进行检索和断言。为什么我必须这样做并不重要,但它让我认为调用其他客户端(控制器)使用的DAL对象上的方法听起来并不健康。这里有一个例子:
FileDal fileDal = CastleFactory.CreateFileDal();
fileDal.BeginTransaction();
FileController fileController = new FileController(fileDal);
fileController.CallInterestingMethodThatUsesFileDal();
fileDal.Commit();
我很感兴趣的是看到一个简单的例子,你正在做什么。这可以让我们更多地了解你的特定情况。 – Steven 2010-09-18 20:04:46