Конфигурация для нескольких проектов - PullRequest
0 голосов
/ 04 июля 2010

Мой проект

Я пишу приложение Winform с использованием VS C # 2.0, которое состоит из нескольких библиотек и двух исполняемых файлов, каждый в своем собственном файле проекта и все являются частью одного и того же решения..

Каждый проект имеет свой класс настроек, параметры конфигурации которого.Некоторые параметры зависят от проекта, некоторые нужны более чем одному проекту (но не для всех), а другие зависят от модели аппаратного устройства, подключенного через USB к пользовательской машине (и выбираются во время выполнения).

Класс настроек состоит из перечислений, свойств и методов Load и Save.

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

Моя проблема

Мне нужен способ для настройки пользователем всего приложения (назовем его configurator ), поэтому я попытался создать другой проект, который имел бы форму с сеткой свойств, но завершился проблемой циклической ссылки между configurator и моим основным исполняемым файлом.Конфигуратор должен запускаться сам по себе или вызываться из основного исполняемого файла.

Кроме того, я не знаю хорошего способа реплицировать изменения в значении общего параметра на егодвойники.Например, если параметр p является общим для классов настроек проектов A и B , когда пользователь изменяет значение Ap , конфигуратор должен будет изменить значение Bp (и то же самое для обратного).Единственное решение, которое я решил решить, - это кошмарные предложения if в обработчике событий PropertyValueChanged в сетке свойств.

Спасибо, Хейдди

1 Ответ

0 голосов
/ 04 июля 2010

Чтобы уменьшить циклическую зависимость, вы должны соответственно включить абстрактные классы и интерфейсы.

Базовая библиотека: состоит из всех классов «данных», реализующих IPropertyChangedNoitifier и которые должны быть согласованы во всем.Загрузка / сохранение конфигурации должна быть сохранена в самой этой библиотеке.

Библиотека конфигурации: ссылается на базовую библиотеку и выполняет изменения конфигурации и вызывает определенные события об изменении конфигурации.Однако этот проект должен содержать только пользовательский интерфейс для настройки;

Проект конфигурации: загружает и выполняет пользовательский интерфейс библиотеки конфигурации.

Фактический проект: Ссылки на базовую библиотеку и библиотеку конфигурации, и вы можете загрузить пользовательский интерфейс конфигурациииз этого проекта, а также из другого проекта.

Говоря о репликации настроек во время выполнения, вы можете наблюдать за событиями изменений содержимого файла через File System Watcher и перезагружать вашу конфигурацию через определенные миллисекунды после обнаружения изменений файла.

...