Почему я должен сослаться на этот блок, даже при том, что то, что я был используемым

У меня есть архитектура как следующее:

Данные (Библиотека классов, которая обрабатывает наш материал Платформы Объекта),
Компоненты (Библиотека классов среднего уровня та ссылочная Библиотека данных)
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 раз быстро...),

6
задан starblue 8 July 2010 в 18:47
поделиться

3 ответа

Общее правило здесь таково: ссылка на содержащую сборку любого типа в публичном интерфейсе другой сборки должна быть добавлена в проект. В противном случае компилятор не знает, как разрешить этот тип.

Чтобы ответить на второй вопрос, вам не нужно добавлять ссылки на сборки, содержащие типы, которые только используются внутри других сборок.

6
ответ дан 10 December 2019 в 02:42
поделиться

Компилятору необходимо знать, что такое tblPayment , чтобы выполнить разрешение перегрузки в методе Resolve .

2
ответ дан 10 December 2019 в 02:42
поделиться

Вы не можете разрешить открытый интерфейс для библиотеки без информации о параметрах всех ее функций. Если вы ссылаетесь на библиотеку, в которой общедоступный метод общедоступного типа принимает параметр типа X, вам необходимо знать, что такое X, независимо от того, используете ли вы этот метод в настоящее время или нет.

1
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: