I have a class called 'Article' in a project called 'MyProject.Data', which acts as the data layer for my web application.
I have a separate project called 'MyProject.Admin', which is a web-based admin system for viewing/editing the data, and was build using ASP.NET Dynamic Data.
Basically I want to extend the Article class, using a partial class, so that I can augment one of its properties with a "UIHint" extender, which will allow me to replace the normal multi-line textbox with an FCKEdit control.
My partial class and extender would look like this:
[MetadataType(typeof(ProjectMetaData))]
public partial class Project
{
}
public class ProjectMetaData
{
[UIHint("FCKeditor")]
public object ItemDetails { get; set; }
}
Now this all works fine if the partial class is in the same project as the original partial class - i.e. the MyProject.Data project.
But UI behavior shouldn't sit in the Data layer, but rather, in the Admin layer. So I want to move this class to MyProject.Admin.
However, if I do that, the functionality is lost.
My fundamental question is: can I have 2 partial classes in separate projects, but both referring to the same "class"?
If not, is there a way to accomplish what I'm trying to do, without mixing data-layer logic with UI logic?
No, you cannot have two partial classes referring to the same class in two different assemblies (projects). Once the assembly is compiled, the meta-data is baked in, and your classes are no longer partial. Partial classes allows you to split the definition of the same class into two files.