我有一个如下的架构:
数据(处理我们的实体框架内容的类库)
组件(引用数据库的中间层类库)
WebOffice(引用组件库的Web应用程序,但不是数据库)
现在,我有以下代码片段(它存在于我们的Components.Payment.cs中;而tblPayment包含在我们的数据库中。):
public static Payment Retrieve(int id)
{
var t = repository.Retrieve(id);
//the above line returns a tblPayment object
if (t != null)
return new Payment(t);
return null;
}
public static Payment Retrieve(tblPayment tblPayment)
{
return new Payment(tblPayment);
}
我添加之后; WebOffice项目发出以下错误:
errorCS0012:类型'Data.Model.tblPayment'在未引用的程序集中定义。您必须添加对程序集'Data,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 749b8697f3214861'的引用。
现在,这对我来说没有多大意义,因为WebOffice项目根本没有调用Retrieve(tblPayment tblPayment)方法。 (那只在组件库中使用)
有什么理由要求数据引用?我是否需要引用引用库引用的每个库? (试着说快5次......)
答案 0 :(得分:6)
此处的一般规则是必须将对另一个程序集的公共接口中任何类型的包含程序集的引用添加到项目中。否则编译器不知道如何解析该类型。
要回答第二个问题,您无需添加对包含仅类型的程序集的引用,这些类型在内部用于其他程序集。
答案 1 :(得分:2)
编译器需要知道tblPayment
是什么,以便对Resolve
方法执行重载解析。
答案 2 :(得分:1)
如果没有关于其所有功能的参数的信息,则无法解析库的公共接口。如果您引用的是一个公共类型的公共方法接受X类型参数的库,则无论您当前是否使用该方法,都需要知道X是什么。