Я знаю, что могу решить эту проблему, переместив общие валидаторы в отдельный файл и импортировав его в оба модуля, но это не то, что я ищу.
blockquote>Это точно , что вам нужно. Сделай это. В этом нет ничего плохого. В вашем текущем демонстрационном коде два объекта
_validators
даже выглядят одинаково, все их свойства одинаковы - вам даже не нужно создавать два отдельных пользовательских объекта с конкретными свойствами, дополнительными к общим.Плюс - это просто не кажется правильным: валидаторы свойств ClassA должны придерживаться «домена» ClassA и наоборот.
blockquote>Что не кажется правильным, так это то, что
ClassA
выставляетClassB.VALIDATORS.property_b
и наоборот. Почему вы это делаете? Являются ли эти два класса более тесно связаны, чем они должны быть? Похоже, они оба имеют одинаковые имена свойств.Кроме того, если
property_b
будет содержать экземплярClass_B
, который должен быть проверен, и вы хотите объявить код проверки с помощьюClass_B
, то просто дайтеClass_B
метод.validate()
и вызовите его из свойства валидатор, который вы определили в файлеClass_A
.Я пытался переместить
blockquote>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
Компилятор удаляет все неиспользованные ссылки и не развертывает dll излишне. A using
(отдельно) не рассчитывает как использование. Или отметьте dll для развертывания через установку "Copy to output directory" или добавьте некоторый код, который действительно использует типы, объявленные в dll.
Это похоже на один из блоков, на которые Вы ссылаетесь в своем приложении, имеет зависимости от другого блока, который не находится в Вашей папке мусорного ведра.
Вы переименовывали название выходного блока ИЛИ пространства имен в исходном проекте?
Похож на Ваш исходный файл, "WPFApplication1", и я размышляю, что Вы, возможно, изменили выходной тип от dll до exe?