防止循环引用

时间:2009-03-23 00:15:14

标签: c# architecture

我创建了一个与第三方API交互的包装项目。

在另一个项目中,我们称之为MyBusinessLayer.csproj。它通过将包装器项目添加为项目引用来使用此API,以便它可以使用各种类通过HttpRequest / HttpResopnse调用API方法。

现在我需要通过调用名为UpdateRequest.cs的包装类来进行批量更新,并循环遍历数据库中的每个记录,并使用每个记录中的一些字段进行API调用以更新每个记录。

问题是:

1)我想在我的包装器项目中创建类似BulkUpdateRequest.cs 2)问题是它必须将一个通用的对象列表放入构造函数中。这个通用的对象列表(我从数据库中提取的记录),Object的.cs驻留在MyBusinessLayer.csproj中,因为它代表了我的数据库中该表的每个记录的表和实例。如果我将这些对象的通用列表发送到我的包装器。 BulkUpdate.cs类执行循环并发送请求以更新通用列表中的所有这些记录,我刚刚介绍了一个循环引用,因为MyBusinessLayer.csproj引用了MyWrapperProject.csproj。然后MyWrapperProject.csproj引用了MyBusinessLayer.csproj中的一个类,因为它接收了代表我们数据库中记录的通用对象实例列表。

所以我想如何保持循环引用的最佳方法呢?我想我可以在MyBusinessLogic.csproj中创建BulkUpdate逻辑,这样我就可以引用UpdateRequest.cs并在我在MyBusinessLayer.cs中创建的某个类中执行循环,并且只使用我们的包装器中的UpdateRequest.cs类项目,而不是将任何MyBusinessLayer类发送到该包装器项目。

我希望这是有道理的......

1 个答案:

答案 0 :(得分:4)

我将假设您引用的“对象的通用列表”属于MyBusinessLayer项目中定义的某种类型,而不是System.Object。我想你这么说。

解决方案是使MyBusinessLayer和MyWrapperProject都依赖于包含IDatabaseObject.cs的第三个项目(MyAbstractDefinitions)以及从IDatabaseObject派生的任何其他接口类型。 MyBusinessLayer和MyWrapperProject都不应该依赖于表示数据库中记录的此对象的具体实现。两个项目都应该依赖于抽象定义。