У меня есть класс под названием «Article» в проекте под названием «MyProject.Data», который действует как слой данных для моего веб-приложения.Возможно ли иметь два частичных класса в разных сборках одного и того же класса?
У меня есть отдельный проект под названием MyProject.Admin, который является веб-административной системой для просмотра/редактирования данных и был создан с использованием динамических данных ASP.NET.
В принципе, я хочу расширить класс Article, используя частичный класс, чтобы я мог расширить одно из его свойств с помощью расширителя «UIHint», который позволит мне заменить стандартный многострочный текстовый блок на элемент управления FCKEdit ,
Мой частичный класс и расширитель будет выглядеть следующим образом:
[MetadataType(typeof(ProjectMetaData))]
public partial class Project
{
}
public class ProjectMetaData
{
[UIHint("FCKeditor")]
public object ItemDetails { get; set; }
}
Теперь это все работает отлично, если частичный класс находится в том же проекте исходного частичного класса - т.е. проекта MyProject.Data.
Но поведение пользовательского интерфейса не должно находиться на уровне данных, а, скорее, на уровне администратора. Поэтому я хочу переместить этот класс в MyProject.Admin.
Однако, если я это сделаю, функциональность будет потеряна.
Мой основной вопрос: могу ли я иметь 2 частичных класса в отдельных проектах, но оба относятся к одному и тому же «классу»?
Если нет, есть ли способ выполнить то, что я пытаюсь сделать, не смешивая логику уровня данных с логикой пользовательского интерфейса?
Именно поэтому понятие MetadataType воняет. (Http://en.wikipedia.org/wiki/Code_smell). Это совершенно ошибочное решение. Вы пытаетесь создать MVC, который специально отделяет модель от представления от контроллера, и вам нужна логика просмотра и проверки в классах данных. Rediculous. Должен быть лучший способ применения этих атрибутов. Вы должны уметь сопоставлять класс метаданных с классом данных с использованием свободного API или чего-то подобного. Его не следует испечь. – Jim
Некоторые другие ответы говорят об этом: если это абсолютная необходимость, и вы владеете ссылочным источником сборки, вы всегда можете включать исходные модели в качестве связанных файлов (сплит-кнопка в файле Add-Existing-Item сборщик), поэтому они построены с потреблением вместо сборки ref. (Аналогичная стратегия заключается в том, чтобы выставлять свой слой Model/Data через WCF с помощью Service Reference и расширять классы с частичным кодом.) Вы никогда не вынуждены разбивать слои - вы всегда можете подклассы. И 'MetadataType' делает модели больше похожими на ViewModels. – JoeBrockhaus
Слишком поздно отвечать, но у меня есть решение [Здесь] (http://stackoverflow.com/questions/17186379/putting-dataannotation-buddy-class-in-another-assembly/37343388#37343388) – Usman