对不起,如果这是一个非常基本的问题,但它真的让我很开心。我非常喜欢DI的想法,这对我的测试确实有帮助,但我想我已经碰到了一堵砖墙。所以,我有两种类型:DI对象图建筑 - 分离逻辑和构造图
Table
TableManager
现在的表对象都有这样就可以构造:
Table(ITableCommandRunner tableRunner,
IQueryProvider queryProvider,
IDataReader reader,
string Name)
现在的表对象几乎只使用这些对象,以便以下是你要求的规则你需要什么我将它们传入。现在我的TableManager对象用于打开和关闭等表。它唯一需要的是一个ITableCommandRunner,所以我在构造函数中传递它。
TableManager(ITableCommandRunner tablrunner)
好这很好,但在TableManager.OpenTable命令我必须呼吁ITableCommandRunner打开表条命令,然后建立一个新的表对象传回。
public ITable OpenTable(string tableName)
{
// Call open table command on tablerunner.
// I need a IQueryProvider and IDataReader to pass to the table.
return new Table<TEntity>(this.tablerunner, provider,reader, tableName);
}
但现在在我的开放表命令我必须做一个IDataReader和IQueryProvider。如果我将它们传递给TableManager的构造函数,这并不违反“仅仅将对象传递给内部类型而不真正使用它们”。
我不太确定我是如何做到这一点的。任何人都可以帮助我吗?
我只是不知道如何分开对象结构和逻辑。
我想我可能只需要在管理器中使用IQueryProvider和IDataReader。表管理器几乎只是一个名称不同的工厂。我观看了DI与MiškoHevery的谷歌技术演讲,并且同意他所说的话,但我永远无法找到任何现实世界中我所处境况的例子。说“不要仅仅通过对象就好了”他们失望“,但没有一个例子,这意味着什么。我正在开发SDK,因此每个部分都需要独立。 – 2009-07-05 08:27:35