簡體   English   中英

如何將ConfigurationSection屬性作為System.Type獲取

[英]How do I get ConfigurationSection property as a System.Type

我想定義一個自定義配置部分,並且有一個屬性不會產生字符串,而是一個system.type(如果用戶輸入了一堆垃圾,則為null)

例如:

<myCustomConfig myAnnoyingType="System.String" />

在C#中(在當前的現實世界中)

[ConfigurationProperty("myAnnoyingType")]
public string MyAnnoyingType
{
   get { return (string)this["myAnnoyingType"]; }
}

// else where in the app
var stringType = thatConfig.MyAnnoyingType
var actualType = Type.GetType(stringType);
// wow that was boring.

在C#中(在理想世界中)

[ConfigurationProperty("myAnnoyingType")]
public Type MyAnnoyingType
{
    get { return (Type)this["myAnnoyingType"]; }
}

我想要的不是必須將項目保存為C#中的字符串,然后將其轉換為應用程序中的Type; 我希望這是作為ConfigurationManager職責的一部分自動完成的。

這可能嗎? 如果必須的話,我可以使用TypeConverter,只是將它保持為字符串似乎很弱,然后在應用程序中進行類型查找。 這不難做到,當我知道我正在尋找一種類型時,似乎毫無意義,必須明確地做它的價值。

嘗試使用將為您進行轉換的TypeConverterAttribute。 這對我有用。

    [ConfigurationProperty("type")]
    [TypeConverter(typeof(TypeNameConverter))]
    public Type Type
    {
        get
        {
            return (System.Type)this["type"];
        }
        set
        {
            this["type"] = value;
        }
    }

首先,最好使用完全限定名稱在設置中定義類型。 這樣,從string解析Type就會減少問題。

其次,您需要找到Type的字符串名稱,因為在轉換字符串中已經回答了C#中的類型,因為它不可能只是將stringType

在你的情況下,它將是:

[ConfigurationProperty("myAnnoyingType")]
public Type MyAnnoyingType
{
    get { return Type.GetType(this["myAnnoyingType"]); }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM