Как разделить проект класса, имеющий часть в dll, а другой в коде (сложный вопрос) - PullRequest
1 голос
/ 20 января 2011

В настоящее время я пытаюсь сделать что-то немного хитрое, что я действительно не знаю, возможно ли это сделать.

У меня есть проект класса, и я хочу разделить его на два раздела: «Основные» и «Разработки для клиентов».И мой клиент хочет получить исходный код этого проекта, но я не хочу предоставлять исходный код раздела «Ядро», я просто хочу дать ему источник «Разработки для конкретного клиента».

Итак, чтобы продемонстрировать практический пример, давайте представим, что у меня есть частичный класс с именем «User», у которого есть два метода «CreateUser» и «CreateUserForClientSite».Таким образом, метод «CreateUser» будет расположен в разделе «Core», а «CreateUserForClientSite» расширит «CreateUser» конкретными требованиями для моего клиентского сайта (помните, что эти методы НЕ могут быть статическими, поэтому в этом случае функция расширения класса C # 3.0 не имеет смысла),Если у меня есть раздел «Core» в dll, могу ли я расширить частичный класс, присутствующий в dll?

Теперь давайте представим другой сценарий.Что, если у «Core» есть методы, которые зависят от классов «Клиент-специфических разработок», и наоборот?Поскольку я не могу сделать циклическую ссылку между проектами, как я могу управлять этим (возможно)

Спасибо

1 Ответ

2 голосов
/ 20 января 2011

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

Таким образом, вы не можете скомпилировать dll с одной частью, а затем ссылаться на эту сборку в другом проекте и добавлять дополнительные методы кчастичный класс.

Я предлагаю по возможности заменить частичные классы наследованием в вашем случае.

Подробнее о частичных классах в msdn (см. раздел «Ограничения»).).

Что касается циклических ссылок - вам придется перепроектировать вашу объектную модель, если разбиение на две сборки приводит к этой проблеме.Обычно это указывает на недостатки в модели, которые должны быть исправлены в любом случае.

Вы можете определить интерфейсы в сборке ядра, чтобы нарушить круговую привязку.И реализовать интерфейсы в специфической для клиента сборке.Взгляните на эту статью, например - Как избавиться от циклических ссылок в C #

...