1. ホーム
  2. asp.net

[解決済み] 異なるアセンブリにある2つの部分クラスが同じクラスを表現することは可能でしょうか?

2022-06-13 12:03:15

質問

MyProject.Data'というプロジェクトに'Article'というクラスがあり、私のWebアプリケーションのデータ層として機能しています。

MyProject.Admin'という別のプロジェクトがあり、これはデータを表示/編集するためのWebベースの管理システムで、ASP.NET Dynamic Dataを使用して構築されています。

基本的には、部分クラスを使用して Article クラスを拡張し、そのプロパティの 1 つを "UIHint" エクステンダーで拡張できるようにしたいのですが、これにより、通常の複数行テキストボックスを FCKEdit コントロールで置き換えることができます。

私の部分クラスとエクステンダーは次のようになります。

[MetadataType(typeof(ProjectMetaData))]
public partial class Project
{
}

public class ProjectMetaData
{
    [UIHint("FCKeditor")]
    public object ItemDetails { get; set; }
}

これで、部分クラスが元の部分クラスと同じプロジェクト、つまり MyProject.Data プロジェクト内にあれば、すべて正常に動作するようになりました。

しかし、UI の動作は Data レイヤーではなく、Admin レイヤーにあるべきです。そこで、このクラスをMyProject.Adminに移動させたいと思います。

しかし、そうすると、機能が失われてしまいます。

私の基本的な質問は、別々のプロジェクトに2つの部分クラスがありますが、両方とも同じ"class"を参照していることは可能でしょうか?

そうでない場合、データ層ロジックとUIロジックを混合することなく、私がやろうとしていることを達成する方法はありますか?

どのように解決するのですか?

いいえ、2 つの異なるアセンブリ (プロジェクト) で同じクラスを参照する 2 つの部分クラスを作成することはできません。アセンブリがコンパイルされると、メタデータが焼き込まれ、クラスはもはや部分的ではなくなります。部分クラスは、同じクラスの定義を 2 つのファイルに分割することを可能にします。