У меня есть архитектура как следующее:
Данные (Библиотека классов, которая обрабатывает наш материал Платформы Объекта),
Компоненты (Библиотека классов среднего уровня та ссылочная Библиотека данных)
WebOffice (веб-приложение, что ссылочная библиотека 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: тип 'Данные. Model.tblPayment' определяется в блоке, на который не ссылаются. Необходимо добавить ссылку на блок 'Данные, Version=3.5.0.0, Culture=neutral, PublicKeyToken=749b8697f3214861'.
Теперь, это не вполне имеет смысла мне, потому что проект WebOffice не звонит Получать (tblPayment tblPayment) метод вообще. (Это используется только в библиотеке Components),
Какая-либо подсказка, почему это попросило бы Ссылку на данные? Я должен сослаться на каждую библиотеку что ссылочная библиотека ссылки? (попытайтесь говорить что 5 раз быстро...),
Общее правило здесь таково: ссылка на содержащую сборку любого типа в публичном интерфейсе другой сборки должна быть добавлена в проект. В противном случае компилятор не знает, как разрешить этот тип.
Чтобы ответить на второй вопрос, вам не нужно добавлять ссылки на сборки, содержащие типы, которые только используются внутри других сборок.
Компилятору необходимо знать, что такое tblPayment
, чтобы выполнить разрешение перегрузки в методе Resolve
.
Вы не можете разрешить открытый интерфейс для библиотеки без информации о параметрах всех ее функций. Если вы ссылаетесь на библиотеку, в которой общедоступный метод общедоступного типа принимает параметр типа X, вам необходимо знать, что такое X, независимо от того, используете ли вы этот метод в настоящее время или нет.