Валидатор для строк типа? - PullRequest
1 голос
/ 02 ноября 2008

Кто-нибудь знает, существует ли уже валидатор для строк типа?

Я хочу убедиться, что атрибуты типа в моей пользовательской конфигурации являются следующими:

type="TopNamespace.SubNameSpace.ContainingClass, MyAssembly"
type="TopNamespace.SubNameSpace.ContainingClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"

Писать достаточно просто, я просто не хочу изобретать велосипед.

Ответы [ 4 ]

2 голосов
/ 15 ноября 2008

Я не уверен, что вы подразумеваете под "пользовательской конфигурацией", но если вы все еще работаете в инфраструктуре конфигурации .NET (например, разрабатываете пользовательскую configurationSection / configurationElement ), вы можете просто ввести свойство как System.Type (вместо строки), и .NET выполнит проверку автоматически.

0 голосов
/ 16 ноября 2008

Предложение Авраама Пинзура верно, если вы пишете пользовательский раздел конфигурации.

Type.GetType(...) позволяет делать это вручную.

0 голосов
/ 03 ноября 2008

Я почти уверен, что для этого ничего не встроено в фреймворк.

На regexlib.com есть пара результатов. Любой из них должен работать для сценария, который вы описали. Однако имейте в виду, что ни один из них не будет должным образом поддерживать синтаксис для указания универсальных типов. Чтобы правильно обработать это, одного регулярного выражения будет недостаточно - вам нужно будет рекурсивно обработать одно и то же регулярное выражение для аргументов универсального типа. Например, рассмотрим следующие имена типов:

List<>
"System.Collections.Generic.List`1"

List<string>
"System.Collections.Generic.List`1[[System.String]]"

Dictionary<string, string>
"System.Collections.Generic.Dictionary`2[[System.String],[System.String]]"

Dictionary<string, List<string>>
"System.Collections.Generic.Dictionary`2[[System.String],[System.Collections.Generic.List`1[[System.String]]]]"

Дополнительные сведения см. В документации MSDN по Type.AssemblyQualifiedName .

.
0 голосов
/ 02 ноября 2008

Вы получите сообщение об ошибке с помощью Global Error Analysis, если не удается найти пространство имен или класс, но это не всегда полезно, если вы ссылаетесь на плагин.

Вероятно, самое простое - поместить код для загрузки домена приложения в блок try catch.

если dll находится в корзине, она будет загружена при запуске, но не будет выдавать ошибку, пока вы не воспользуетесь ею, так что если вы просто создадите новый экземпляр ConistingClass. Вы можете извлечь пространства имен из конфигурации, а затем попробовать использовать каждый класс.

...