【问题标题】:How to "carry" references across projects如何跨项目“携带”引用
【发布时间】:2013-12-30 13:48:59
【问题描述】:

我有 2 个项目:X 和 Y。项目 X 是一个类库,可以说是 EF 6。项目 Y 作为引用 X 的控制台应用程序。如果我不这样做,为什么会出现无法加载依赖项异常可以说,将 EF 6 添加到项目 Y?有没有办法“携带”这些对项目 Y 的引用?

这里的想法是 Y 不应该知道 EF-6,更不用说它的依赖关系了!

【问题讨论】:

  • @leonardo,如果你想使用项目 Y,而不引用 EF-6,这是一个理想的要求,你不应该访问任何直接或继承的 EF-6 类实例,即 DataContext、ExceptionClasses。最好的方法是在 X 项目中对您的 EF 函数进行包装,并且永远不要直接在 Y 中使用上下文
  • @ManishMishra 我知道!我做到了!事实上,现在,我的代码什么都不做!它是空的!那里绝对什么都没有!只是一个空的 Main!

标签: c# visual-studio dll dll-reference


【解决方案1】:

您很可能向 Y 公开了继承自 Entity Framework 的类,很可能是您的实体,如果项目 Y 使用了您的 Context 等等。

因此,项目 Y 需要引用实体框架,因为它无法解析您的类继承自的类(基础属性、逻辑)。

对 Y 隐藏实体框架的唯一方法是使其完全独立于它。因此,例如,您可以在项目 Y 调用的项目 X 中创建一个服务类,并且此类的方法不公开任何来自 Entity Framework 的类,也不公开任何从 Entity Framework 中的类继承的类。您可以通过创建自己的实体来做到这一点,然后从 Entity Framework 等中的查询映射到这些实体。

另一种方法是将项目 X 隐藏在 Web 服务 (WCF) 后面。然后项目 Y 调用 Web 服务,该服务调用项目 X 中的逻辑。WCF Web 服务不暴露任何实体框架,因此您的项目 Y 不需要对它的任何引用。

【讨论】:

  • 现在我的代码是空的!只有一个空的主要功能!如果是这样的话,我会得到一个编译时错误,而不是运行时错误......
  • 我认为你不明白我的回答。您的意思是您的 Y 项目是空的,但是 Y 引用的 X 项目公开了从实体框架类继承的类。所以不管 Y 是否已经包含逻辑,它引用 X 的事实,它暴露了从 EF 继承的类,这意味着 Y 也必须引用 EF。
  • 这没有多大意义罗伊,你看,基本上你说的是我的接口和控制器绑定到我的 OR/M 解决方案,而只有我的“存储库解决方案”应该。现在整个 X 项目只有 1 个类,并且该类有 1 个方法(无属性),返回 null 且不带参数! X 基本上是一个空项目,通过 Nuget 在其上安装了 EF……如果不将 EF 添加到控制台应用程序项目中,我仍然无法运行它……如果我听起来很沮丧,我很抱歉……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多