外部のxmlファイルからコントロールの設定/プロパティをロードするスキン可能なコントロールライブラリがあります。これらXml
はスキンエディターアプリケーションで使用されるため、クラスは別のプロジェクトにあります。現在、質問です。コントロールはコンストラクターで xml オブジェクトを受け入れてビルドしControl
ますが、各コントロールを作成する適切な方法を見つける必要があります。
XML クラスの例:
[Serializable]
[XmlInclude(typeof(XmlButton))]
[XmlInclude(typeof(XmlGroup))]
[XmlType(TypeName="Control")]
public class XmlControl
{
[DefaultValue(0)]
public int Width { get; set; }
[DefaultValue(0)]
public int Height { get; set; }
...
およびコントロール タイプごとの派生タイプ
[Serializable]
[XmlType(TypeName = "Button")]
public class XmlButton : XmlControl
{
public string Label { get; set; }
}
制御クラス
public class GUIControl : GUI3DBase
{
public GUIControl(XmlControl skinXml)
{
SkinXml = skinXml;
...
public class GUIButton : GUIControl, IActionControl
{
public GUIButton(XmlControl skinXml) : base(skinXml)
{
}
...
ここで助けが必要です。現時点では、渡された xml オブジェクトに基づいてコントロールを作成するメソッドがあります。
public static GUIControl CreateControl<T>(T skinXml) where T : XmlControl
{
if (skinXml is XmlButton)
{
return new GUIButton(skinXml);
}
else if (skinXml is XmlGroup)
{
return new GUIGroup(skinXml);
}
....
私は約 30 のコントロールを持っており、"if はしご" が急速に成長しています。xml オブジェクト タイプをチェックしてから対応するコントロール タイプを作成する必要なく、これらのコントロールを作成する簡単な方法が欠けているように感じます。
Type
Xml オブジェクトにプロパティを追加すると、循環依存が発生するため、追加できません。
優れたファクトリ メソッドまたは新しい構造レイアウトに関するヘルプは素晴らしいでしょう