Is it possible to have two partial classes in different assemblies represent the same class?

Jonathan picture Jonathan · Mar 15, 2009 · Viewed 44.6k times · Source

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?

Answer

Darin Dimitrov picture Darin Dimitrov · Mar 15, 2009

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.