Почему я получаю исключение FileNotFound при ссылке на другой проект из того же решения?

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

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

Плюс - это просто не кажется правильным: валидаторы свойств ClassA должны придерживаться «домена» ClassA и наоборот.

Что не кажется правильным, так это то, что ClassA выставляет ClassB.VALIDATORS.property_b и наоборот. Почему вы это делаете? Являются ли эти два класса более тесно связаны, чем они должны быть? Похоже, они оба имеют одинаковые имена свойств.

Кроме того, если property_b будет содержать экземпляр Class_B, который должен быть проверен, и вы хотите объявить код проверки с помощью Class_B, то просто дайте Class_B метод .validate() и вызовите его из свойства валидатор, который вы определили в файле Class_A.

Я пытался переместить exports до require, объявив мои структуры как var, чтобы использовать подъем, и многое, многое другое.

Что ж, если вы посмотрите на два литерала объекта

const a_validators = {
    property_a: (value) => true,
    property_b: b_validators.property_b,
};
const b_validators = {
    property_b: (value) => true,
    property_a: a_validators.property_a,
};

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

Другое решение - объявить их полупустыми и лениво инициализировать остальные, когда оба модуля были загружены. Вы можете сделать это с помощью геттеров - и при перезаписи module.exports вместо создания свойств для него вам также необходимо поместить вызов require() внутри геттера.

const _validators = {
    property_a: (value) => true,

    get property_b() {
        const { ClassB } = require('./ClassB');
        return ClassB.VALIDATORS.property_b;
    }
};
// and vice versa
5
задан Ryan 13 July 2011 в 16:14
поделиться

3 ответа

Компилятор удаляет все неиспользованные ссылки и не развертывает dll излишне. A using (отдельно) не рассчитывает как использование. Или отметьте dll для развертывания через установку "Copy to output directory" или добавьте некоторый код, который действительно использует типы, объявленные в dll.

5
ответ дан 14 December 2019 в 09:01
поделиться

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

0
ответ дан 14 December 2019 в 09:01
поделиться

Вы переименовывали название выходного блока ИЛИ пространства имен в исходном проекте?

Похож на Ваш исходный файл, "WPFApplication1", и я размышляю, что Вы, возможно, изменили выходной тип от dll до exe?

1
ответ дан 14 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

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