2014-02-25 15 views
1

我正在创建一个接口,我想在多个新解决方案中使用它。让我们称之为新的解决方案ProjectX如何在使用多种解决方案在C#中创建接口时避免循环引用?

的接口IBar和1在IBar,我定义了必须返回一个型号FooModel的方法。

模型Foo和接口类IBar住在数据解决方案中。因此,我将Data Solution参考添加到SolutionX,我现在可以轻松实现接口(DataProject.Interfaces.Bar)并返回FooModel(DataProject.Models.FooModel)。

如何调用ProjectX中实现IBar接口的方法?

如果我尝试添加ProjectX引用数据层解决方案我得到一个循环引用错误。我对接口很陌生,所以请原谅我的无知。

回答

1

您应该对它进行不同的设置,使IBar方法返回IFooModel的东西。

然后在一个单独的项目中定义IBarIFooModel

接口用于分解循环引用,当您发现您正在创建循环时出现问题。

+0

不,不一定。在某些时候,具体的类可能是有用的。 – Georg

+0

是的,我有一种感觉,我需要将模型和类移入自己的项目。但是,如果我真的需要FooModel,为什么要返回IFooModel? – ppumkin

+0

@Georg - 显然在某个时候。但是现在这种连接被深埋在某个DI层的内部。 –

2

您不需要在DataProject中提及SolutionX。您可以通过界面访问IBar隐藏的功能。因此,在DataProject中,您可能具有以IBar作为参数的功能。

void Foo(IBar bar) {...} 
+0

我明白你的意思了。但数据层需要决定调用哪个“模块”,并获取FooModel的列表,对其应用一些过滤器,然后发送到我们的前端就像正常一样工作。那么如果我不能引用它,我该如何访问那个特定类的结果呢? – ppumkin

+0

在这种情况下,您需要依赖注入器。所以基本上,你设置'DataProject'来使用上面的'IBar'对象。然后用一个依赖注入器调用该方法,注入一个“IBar”的实现。 http://en.wikipedia.org/wiki/Dependency_Injection – Georg

+0

这是使用依赖注入器真正有趣的解决方案。不幸的是,对于这个项目来说,它太多了,无法立即处理。但是请记住这一点。我遵循Henks的建议,它已经非常成功。尽管如此,仍然打开其他答案。 – ppumkin

相关问题